[英]Convert table rows into columns in Microsoft SQL Server
這是我的桌子:
ID | 范圍 | 閱讀 |
---|---|---|
1213 | 先生號 | 1 |
1213 | 先生號 | (無效的) |
1213 | 先生號 | (無效的) |
1213 | 姓名 | (無效的) |
1213 | 姓名 | 最終評級 |
1213 | 姓名 | 多數評級 |
1214 | 先生號 | 1 |
1214 | 先生號 | (無效的) |
1214 | 先生號 | (無效的) |
1214 | 姓名 | (無效的) |
1214 | 姓名 | 最終評級 |
1214 | 姓名 | 多數評級 |
我想要輸出為:
ID | 先生號 | 姓名 |
---|---|---|
1213 | 1 | (無效的) |
1213 | (無效的) | 最終評級 |
1213 | (無效的) | 多數評級 |
我想在 Microsoft SQL Server 中執行此操作。
我寫了以下查詢:
SELECT
(SELECT Reading FROM test_table
WHERE ID = 1213 AND Parameter = 'Sr No.') AS SrNo,
(SELECT Reading FROM test_table
WHERE ID = 1213 AND Parameter = 'Name') AS Name
FROM
test_table
但我收到了這個錯誤:
子查詢返回超過 1 個值。 當子查詢跟隨 =、!=、<、<=、>、>= 或子查詢用作表達式時,這是不允許的。
你的數據
CREATE TABLE mytable(
ID INTEGER NOT NULL
,Parameter VARCHAR(70) NOT NULL
,Reading VARCHAR(70) NOT NULL
);
INSERT INTO mytable
(ID,Parameter,Reading) VALUES
(1213,'Sr No.','1'),
(1213,'Sr No.','(null)'),
(1213,'Sr No.','(null)'),
(1213,'Name','(null)'),
(1213,'Name','Final Rating'),
(1213,'Name','Majority Rating'),
(1214,'Sr No.','1'),
(1214,'Sr No.','(null)'),
(1214,'Sr No.','(null)'),
(1214,'Name','(null)'),
(1214,'Name','Final Rating'),
(1214,'Name','Majority Rating');
在您的Subquery
中使用Row_number
和Join
以獲得您想要的結果
SELECT A.id,
[sr no.],
[name]
FROM (SELECT id,
reading AS 'Sr No.',
Row_number()
OVER(
ORDER BY (SELECT NULL)) RN
FROM mytable
WHERE parameter = 'Sr No.') A,
(SELECT id,
reading AS 'Name',
Row_number()
OVER(
ORDER BY (SELECT NULL)) RN
FROM mytable
WHERE parameter = 'Name') B
WHERE A.id = B.id
AND A.rn = B.rn
AND A.id = 1213
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.