簡體   English   中英

在 Microsoft SQL Server 中將表行轉換為列

[英]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_numberJoin以獲得您想要的結果

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM