34,590
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE [dbo].[CTB](
Id int,
CustomerId int,
ConfigurationId int,
Value varchar(200)
)
GO
INSERT CTB(Id, CustomerId, ConfigurationId, Value) VALUES
(1, 1, 100, 'aaa')
, (2, 1, 110, 'true')
, (3, 1, 120, 'false')
, (4, 2, 100, 'bbb')
, (5, 3, 100, 'ccc')
, (6, 4, 100, 'ddd')
GO
/*
这是我想要生成的数据形式
--------------------------------------------------------------------------
ConfigurationId\CustomerId 1 2 3 4
100 aaa bbb ccc ddd
110 true NULL NULL NULL
120 false NULL NULL NULL
*/
declare @sql varchar(8000)
set @sql = 'select ConfigurationId '
select @sql = @sql + ' , max(case CustomerId when ''' + CustomerId + ''' then Value else 0 end) [' + CustomerId + ']'
from (select distinct CustomerId from tb) as a
set @sql = @sql + ' from tb group by ConfigurationId'
exec(@sql)
select ConfigurationId,
max(case CustomerId when 1 then Value else 0 end)as 1
max(case CustomerId when 2 then Value else 0 end)as 2
max(case CustomerId when 3 then Value else 0 end)as 3
max(case CustomerId when 4 then Value else 0 end)as 4
from CTB
group by ConfigurationId
select ConfigurationId,max(case CustomerId when 1 then value else NULL end) [1],
max(case CustomerId when 2 then value ELSE NULL end) [2],
max(case CustomerId when 3 then value else NULL end) [3],
max(case CustomerId WHEN 4 then value else NULL end) [4]
from [CTB]
group by ConfigurationId
IF OBJECT_ID('CTB') IS NOT NULL DROP TABLE CTB
GO
CREATE TABLE [dbo].[CTB](
Id int,
CustomerId int,
ConfigurationId int,
Value varchar(200)
)
GO
INSERT CTB(Id, CustomerId, ConfigurationId, Value) VALUES
(1, 1, 100, 'aaa')
, (2, 1, 110, 'true')
, (3, 1, 120, 'false')
, (4, 2, 100, 'bbb')
, (5, 3, 100, 'ccc')
, (6, 4, 100, 'ddd')
GO
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL=ISNULL(@SQL+',','SELECT ConfigurationId,')
+'
MAX(CASE CustomerId WHEN '+LTRIM(CustomerId)+' THEN VALUE ELSE NULL END) '
FROM CTB
GROUP BY CustomerId
EXEC (@SQL+'
FROM CTB
GROUP BY ConfigurationId')
/*
100 aaa bbb ccc ddd
110 true NULL NULL NULL
120 false NULL NULL NULL
*/
select ConfigurationId,max(case CustomerId when 1 then value else 0 end) [1],
max(case CustomerId when 2 then value else 0 end) [2],
max(case CustomerId when 3 then value else 0 end) [3],
max(case CustomerId when 4 then value else 0 end) [4]
from [CTB]
group by ConfigurationId
select ConfigurationId,max(case CustomerId when 1 then value else 0 end) [1]
max(case CustomerId when 2 then value else 0 end) [2]
max(case CustomerId when 2 then value else 0 end) [3]
max(case CustomerId when 2 then value else 0 end) [4]
group by ConfigurationId
CREATE TABLE [dbo].[CTB](
Id int,
CustomerId int,
ConfigurationId int,
Value varchar(200)
)
GO
INSERT CTB(Id, CustomerId, ConfigurationId, Value) VALUES
(1, 1, 100, 'aaa')
, (2, 1, 110, 'true')
, (3, 1, 120, 'false')
, (4, 2, 100, 'bbb')
, (5, 3, 100, 'ccc')
, (6, 4, 100, 'ddd')
GO
/*
这是我想要生成的数据形式
--------------------------------------------------------------------------
ConfigurationId\CustomerId 1 2 3 4
100 aaa bbb ccc ddd
110 true NULL NULL NULL
120 false NULL NULL NULL
*/
select ConfigurationId as [ConfigurationId\CustomerId],
max(case CustomerId when 1 then value end) as [1],
max(case CustomerId when 2 then value end) as [2],
max(case CustomerId when 3 then value end) as [3],
max(case CustomerId when 4 then value end) as [4]
from CTB
group by ConfigurationId