是否有人可以幫助我實現這個查詢:我需要攜帶所有的ID爲的值爲1,每個字母:SQL查詢來選擇特定的列值,並且將它們連接起來
回答
這是一個兩步過程。首先,你需要UNPIVOT列以行:
SELECT upvt.ID, Letters
FROM T
UNPIVOT
( Value
FOR Letters IN ([A], [B], [C], [D], [E], [F])
) upvt
WHERE upvt.Value = 1;
這給:
ID Letters
10 A
10 C
10 E
10 F
...
然後你需要連接的ID的從這個結果:」
WITH Unpivoted AS
( SELECT upvt.ID, Letters
FROM T
UNPIVOT
( Value
FOR Letters IN ([A], [B], [C], [D], [E], [F])
) upvt
WHERE upvt.Value = 1
)
SELECT u.Letters,
IDs = STUFF(( SELECT ', ' + CAST(u2.ID AS VARCHAR(10))
FROM Unpivoted u2
WHERE u.Letters = u2.Letters
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
FROM Unpivoted u
GROUP BY u.Letters;
其中給出:
Letters IDs
A 10, 20, 50
B 20, 40
C 10, 20, 30, 40, 50
D 30, 40
E 10, 50
F 10, 20, 40
非常感謝。我在哪裏可以指定Letter列的值。例如,A的列名是Letter_A。我怎麼能把它作爲「A」而不是結果中的列名「Letter_A」? – user3314399
只需使用替換,它說'SELECT u.Letters'使用'SELECT Letters = REPLACE(u.Letters,'Letter_','')' – GarethD
真棒謝謝你,最後一個問題。我如何將它插入臨時表?它不讓我這樣做,因爲查詢使用「with」。 – user3314399
select distinct 'A',
(select cast(id as varchar)+',' from letters where a=1 for xml path('')) ids
from letters where a=1
union all
select distinct 'B',
(select cast(id as varchar)+',' from letters where b=1 for xml path('')) ids
from letters where b=1
union all
select distinct 'C',
(select cast(id as varchar)+',' from letters where c=1 for xml path('')) ids
from letters where c=1
union all
select distinct 'D',
(select cast(id as varchar)+',' from letters where d=1 for xml path('')) ids
from letters where D=1
union all
select distinct 'E',
(select cast(id as varchar)+',' from letters where e=1 for xml path('')) ids
from letters where e=1
union all
select distinct 'F',
(select cast(id as varchar)+',' from letters where f=1 for xml path('')) ids
from letters where f=1
這裏有兩個問題:第一,該表是不歸,讓你真正需要首先做一個額外的步驟來創建標準化數據的臨時表:
第一步:
select id, 'A' as letter
from mytable where a=1
union
select id, 'B'
from mytable where b=1
union
select id, 'C'
from mytable where c=1
union
select id, 'D'
from mytable where d=1
union
select id, 'E'
from mytable where e=1
union
select id, 'F'
from mytable where f=1
然後,你需要將多個ID塞進一個字段。你可以用(欺騙性地命名)「For XML」來做到這一點。
喜歡的東西:
select letter, id + ', ' as [text()]
from
(
select id, 'A' as letter
from mytable where a=1
union
select id, 'B'
from mytable where b=1
union
select id, 'C'
from mytable where c=1
union
select id, 'D'
from mytable where d=1
union
select id, 'E'
from mytable where e=1
union
select id, 'F'
from mytable where f=1
) q
group by letter
for XML path(''))
我認爲這是可行的。
- 1. SQL服務器中:選擇4個非空列,將它們連接起來
- 2. Sql查詢來選擇值並按系列對它們進行分組
- 3. 讀取.part文件並將它們全部連接起來
- 4. SQL查詢來連接表
- 5. SQL查詢來連接表
- 6. SQL查詢來選擇總
- 7. 將原始值與MySQL中的查詢值連接起來
- 8. SQL連接查詢選擇
- 9. SQL查詢來選擇即將到期
- 10. SQL查詢來獲取它們使用特定的列作爲外鍵
- 11. SQL LINQ查詢:選擇特定列
- 12. 使用選擇查詢來源連接表的值
- 13. SELECT * SQL查詢VS選擇特定的列SQL查詢
- 14. 創建excel宏來檢查列值並將它們相加
- 15. 如何使用掃描儀從鍵盤讀取一系列字符串,並將它們連接在一起並將它們連接起來
- 16. SQL選擇獨特的元素,並將它們與上兩期
- 17. Farseer 3.3 DebugViewXNA - 將它連接起來
- 18. Cypher查詢以查找現有節點並將它們關聯起來。
- 19. 動態sql從列中使用連接選擇特定值
- 20. 設計模式來決定哪些SQL查詢來選擇
- 21. 接收來自其它類的特定值,其不連接
- 22. 從[]數組中取元素並將它們連接起來的算法
- 23. 匹配不同的列並將它們用python結合起來
- 24. 查詢與子選擇連接掛起
- 25. REGEX Str替換 - 查找鏈接文本並將它們鏈接起來
- 26. 將Oracle與SQL Server連接起來
- 27. 訪問SQL查詢來連接行
- 28. SQL查詢來連接兩個表
- 29. SQL查詢來選擇屬性
- 30. 獲取SQL查詢來選擇
看起來你需要使用SQL PIVOT \ UNPIVOT,看看這是否有幫助http://stackoverflow.com/questions/3241450/sql-pivot-with-multiple-columns – user3193257