[英]Query row where column condition = 'x' only after a certain corresponding column condition = 'y' in 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_column
值id_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.