Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL server查询:仅将某些列值放入行中,进行迭代_Sql_Sql Server - Fatal编程技术网

SQL server查询:仅将某些列值放入行中,进行迭代

SQL server查询:仅将某些列值放入行中,进行迭代,sql,sql-server,Sql,Sql Server,我需要在SQLServer10.50.1600.1中构建一个SQL查询。我有以下典型情况: id1 | value1 id1 | value2 id2 | value1 id3 | value1 id3 | value2 ... 并希望最终处于一种 id1 | value1 | value2 id2 | value1 | null id3 | value1 | value2 ... 我只知道每个id

我需要在SQLServer10.50.1600.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

如果您事先知道这些值,并且每个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

假设:表格:
表格名称(id列、值列)
。对于
id\u列的每个值
最多有4个
value\u列的值

那你可以用这个

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;

假设:表格:
表格名称(id列、值列)
。对于
id\u列的每个值
最多有4个
value\u列的值

那你可以用这个

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;

以下查询将帮助您:-

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

以下查询将帮助您:-

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
可能的重复可能的重复