我有表和查詢來從行到列選擇資料,如下所示:
id | type | data
-----------------------
1 | Name | John
1 | Gender | Male
1 | Code | 1782
2 | Name | Dave
2 | Gender | Male
詢問 :
select a.id, a.data as [Name], b.data as [Gender], c.data as [Code]
from table1 a join table1 b on a.id = b.id
join table1 c on b.id = c.id
where a.type = 'Name' and b.type = 'Gender' and c.type = 'Code'
結果 :
id | Name | Gender | Code
------------------------------
1 | John | Male | 1782
在這種情況下,名稱為“Dave”的 ID 號 2 沒有“代碼”,因此它不會出現在結果中。我怎樣才能在“代碼”表上仍然顯示帶有空資料或 NULL 的結果,以便得到如下結果:
id | Name | Gender | Code
------------------------------
1 | John | Male | 1782
2 | Dave | Male |
uj5u.com熱心網友回復:
您可以使用CASEexpression 而不是JOINs :
SELECT
a.id,
MAX(CASE WHEN a.type = 'Name' THEN a.data ELSE '' END) AS [Name],
MAX(CASE WHEN a.type = 'Gender' THEN a.data ELSE '' END) AS [Gender],
MAX(CASE WHEN a.type = 'Code' THEN a.data ELSE '' END) AS [Code]
FROM table1 a
WHERE
a.type IN('Name', 'Gender', 'Code')
GROUP BY a.id
uj5u.com熱心網友回復:
select a.id, a.data as [Name], b.data as [Gender], c.data as [Code]
from table1 a
left join table1 b on a.id = b.id and b.type='Gender'
left join table1 c on b.id = c.id and c.type='Code'
where a.type = 'Name'
uj5u.com熱心網友回復:
使用資料透視查詢
select *
from table1
pivot
(
max(data)
for type in ([Name], [Gender], [Code])
) p
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358147.html
標籤:sql sql-server sql-server-2008 数据库表
下一篇:如何對計數查詢求和
