Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/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
Mysql SQL查询-Pivot分组或任何用于获取结果表的概念_Mysql_Sql Server_Sql Server 2012_Sql Server 2008 R2_Sql Server 2016 - Fatal编程技术网

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
值。