[英]How to convert the table rows in form of columns in SQL
您好我有兩個表,我想生成報告,其中所有行將在單行。
tbl_Questions
:
Id Name
---------
1 Abc
2 Cde
3 xyz
4 MMM
tbl_Reponses
:
Id QuestionId Values
------------------------
1 1 123
2 2 456
3 3 444
現在我想得到一個查詢,它會在結果中顯示這樣的時間。
Id Abc Cde xyz MMM
-------------------
1 123 456 444
如何通過查詢獲得此信息?
使用PIVOT
來做到這一點:
SELECT ROW_NUMBER() OVER(ORDER BY [Abc])Id,* FROM
(
SELECT Name,Value FROM tbl_Questions A LEFT JOIN tbl_Reponses B ON A.Id=B.Id
) AS tbl
PIVOT(SUM(Value) FOR Name IN([Abc],[Cde],[xyz],[MMM]))AS pvt
或CrossTab
方法
SELECT
ROW_NUMBER() OVER (ORDER BY MAX(A.Id))Id,
[Abc] = MAX(CASE WHEN Name = 'Abc' THEN Value END),
[Cde] = MAX(CASE WHEN Name = 'Cde' THEN Value END),
[xyz] = MAX(CASE WHEN Name = 'xyz' THEN Value END),
[MMM] = MAX(CASE WHEN Name = 'xyz' THEN Value END)
FROM tbl_Questions A LEFT JOIN tbl_Reponses B ON A.Id=B.Id
使用Group by
select
ID
, MIN(CASE WHEN A.NAME ='ABC'
THEN B.VALUES
END) ABC
, MIN(CASE WHEN A.NAME ='cde'
THEN B.VALUES
END) cde
, MIN(CASE WHEN A.NAME ='xyz'
THEN B.VALUES
END) xyz
, ISNULL(MIN(CASE WHEN A.NAME ='mmm'
THEN B.VALUES
END),'') mmm
FROM
tbl_Questions A
inner join tbl_Reponses B
on A.ID=B.ID
group by A.ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.