簡體   English   中英

SQL Server查詢:僅將某些列值插入行中,進行迭代

[英]SQL server query: only certain column values into row, iterating

我需要在SQL SERVER 10.50.160.1中建立一個SQL查詢。 我有以下模型情況:

id1   |   value1
id1   |   value2
id2   |   value1
id3   |   value1
id3   |   value2
...

並希望最終遇到這樣的情況

id1   |   value1  |   value2   
id2   |   value1  |   null   
id3   |   value1  |   value2
...

我只知道每個id [n] 最多記錄4個值。 編輯:我知道每個最多有4個值,但它們可以是任何值。 它們可以是[0,9000]中包含的任何數字或字符串(大約10種可能性)。 不好,我沒有很好地解釋。

如果您事先知道這些值,並且每個ID的值都是唯一的(它們似乎來自您的問題陳述),則非常簡單:

-- Setup
declare @a table (id nvarchar(50), value nvarchar(50))
insert @a(id, value) values 
    ('id1', 'value1'), 
    ('id1', 'value2'), 
    ('id2', 'value1'),
    ('id3', 'value1'),
    ('id3', 'value2')
;

SELECT id, 
    MAX(CASE value WHEN 'value1' THEN value END) AS value1,
    MAX(CASE value WHEN 'value2' THEN value END) AS value2,
    MAX(CASE value WHEN 'value3' THEN value END) AS value3,
    MAX(CASE value WHEN 'value4' THEN value END) AS value4
FROM @a
GROUP BY id

以下查詢將為您提供幫助:-

declare @test table (id nvarchar(50), value nvarchar(50))
insert @test(id, value) values 
('id1', 'value1'), 
('id1', 'value2'),
('id1', 'value3'), 
('id1', 'value4'),
('id2', 'value1'),
('id3', 'value1'),
('id3', 'value2'),
('id3', 'value3');


select ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS ROWNUM,id,value into #t1 from @test

SELECT distinct id, 
(select value from #t1 b where b.id=a.id AND b.ROWNUM=1) AS Value1,
(select value from #t1 b where b.id=a.id AND b.ROWNUM=2) AS Value2,
(select value from #t1 b where b.id=a.id AND b.ROWNUM=3) AS Value3,
(select value from #t1 b where b.id=a.id AND b.ROWNUM=4) AS Value4
FROM #t1 a

drop table #t1

輸出:-

id  Value1  Value2  Value3  Value4
id1 value1  value2  value3  value4
id2 value1  NULL    NULL    NULL
id3 value1  value2  value3  NULL

假設:TABLE: table_name(id_column, value_column) 每個id_columnid_column有4個value_column

那你可以用這個

WITH tmp as
(SELECT 
    *
    ,ROW_NUMBER() over (PARTITION BY id_column order by value_column) rwn
FROM 
    table_name
)
SELECT 
    id_column
    ,MAX(CASE WHEN rwn = 1 THEN value_column END) value1
    ,MAX(CASE WHEN rwn = 2 THEN value_column END) value2
    ,MAX(CASE WHEN rwn = 3 THEN value_column END) value3
    ,MAX(CASE WHEN rwn = 4 THEN value_column END) value4
FROM
    tmp
GROUP BY 
    id_column;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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