Mysql SQL查询-Pivot分组或任何用于获取结果表的概念
我有一张桌子叫“我的桌子” 我的桌子 我的输出应该是这样的Mysql SQL查询-Pivot分组或任何用于获取结果表的概念,mysql,sql-server,sql-server-2012,sql-server-2008-r2,sql-server-2016,Mysql,Sql Server,Sql Server 2012,Sql Server 2008 R2,Sql Server 2016,我有一张桌子叫“我的桌子” 我的桌子 我的输出应该是这样的 ID Column x1 x2 1 abc 11 9 1 def 23 10 2 abc 1 42 2 def 55 44 3 abc 32 88 3 def 33 90 不确定这在SQL查询中是否可行。我尝试使用SQLPivot,但没有成功。请给出编写查询以获得此结果的建议。看起来您可能
ID Column x1 x2
1 abc 11 9
1 def 23 10
2 abc 1 42
2 def 55 44
3 abc 32 88
3 def 33 90
不确定这在SQL查询中是否可行。我尝试使用SQLPivot,但没有成功。请给出编写查询以获得此结果的建议。看起来您可能可以通过透视创建您要查找的表,请参见下文
SELECT ID, Column1, ISNULL([x1],0) AS 'x1', ISNULL([x2],0) AS 'x2'
FROM
(SELECT ID, RIGHT(Column1,3) AS Column1, LEFT(Column1,2) AS 'x', Value
FROM #start) AS d
PIVOT
(SUM(Value) FOR x IN ([x1],[x2])
) AS piv
我创建了一个临时表来测试它,它成功了。见下表
CREATE TABLE #start ( ID int, Column1 nvarchar(50), Value int);
INSERT INTO #start
VALUES (1, 'x1_abc', 11),
(1, 'x1_def', 23),
(1, 'x2_abc', 9),
(1, 'x2_def', 10),
(2, 'x1_abc', 1),
(2, 'x1_def', 55),
(2, 'x2_abc', 42),
(2, 'x2_def', 44),
(3, 'x1_abc', 32),
(3, 'x1_def', 33),
(3, 'x2_def', 88),
(3, 'x2_def', 90)
以下是我使用PIOVT获得的结果:
ID Column1 x1 x2
1 abc 11 9
2 abc 1 42
3 abc 32 0
1 def 23 10
2 def 55 44
3 def 33 178
我希望这是有帮助的。随时提出任何问题。以防万一,你需要充满活力 示例
Declare @SQL varchar(max) = '
Select *
From (
Select ID
,[Column] = substring([column],charindex(''_'',[column])+1,50)
,Item = left([column],charindex(''_'',[column])-1)
,Value
From YourTable
) Src
Pivot (max([Value]) For [Item] in (' + Stuff((Select Distinct ','+QuoteName(left([column],charindex('_',[column])-1))
From YourTable
Order By 1
For XML Path('')),1,1,'') + ') ) p
Order By 1,2'
Exec(@SQL);
返回
ID Column x1 x2
1 abc 11 9
1 def 23 10
2 abc 1 42
2 def 55 44
3 abc 32 88
3 def 33 90
Select *
From (
Select ID
,[Column] = substring([column],charindex('_',[column])+1,50)
,Item = left([column],charindex('_',[column])-1)
,Value
From YourTable
) Src
Pivot (max([Value]) For [Item] in ([x1],[x2]) ) p
Order By 1,2
生成的SQL如下所示
ID Column x1 x2
1 abc 11 9
1 def 23 10
2 abc 1 42
2 def 55 44
3 abc 32 88
3 def 33 90
Select *
From (
Select ID
,[Column] = substring([column],charindex('_',[column])+1,50)
,Item = left([column],charindex('_',[column])-1)
,Value
From YourTable
) Src
Pivot (max([Value]) For [Item] in ([x1],[x2]) ) p
Order By 1,2
这是一个糟糕的数据模型。你真的受不了了吗-(Yes@Strawberry绝对是糟糕的架构。
列
应该是两个独立的列,一个用于x1
,x2
值,另一个用于abc
,def
值。