Sql 按列分组数据

Sql 按列分组数据,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,可能重复: 我有一个名为Col_values的表,Col_ID是一个标识字段,数据如下所示: Val_ID Col_ID Value 76951792 3 Closed 76951791 3 Closed 76951790 25 Open 76951789 25 Closed 76951792 1 US 76951791

可能重复:

我有一个名为Col_values的表,Col_ID是一个标识字段,数据如下所示:

Val_ID       Col_ID       Value
76951792     3            Closed
76951791     3            Closed
76951790     25           Open
76951789     25           Closed
76951792     1            US
76951791     1            Canada
Col_ID   Col_Name   D_ID
3        Status     1
25       Status     2
1        Country    1
另一个表叫做Et_Col,数据如下所示:

Val_ID       Col_ID       Value
76951792     3            Closed
76951791     3            Closed
76951790     25           Open
76951789     25           Closed
76951792     1            US
76951791     1            Canada
Col_ID   Col_Name   D_ID
3        Status     1
25       Status     2
1        Country    1
我希望输出为:

Val_ID       Status    Country
76951792    Closed     US
76951791    Closed     Canada
76951790    Open       Null
76951789    Closed     Null
Val_ID    Status    Status    Country
76951792  Closed    Null      US
76951791  Closed    Null      Canada
76951789  Null      Closed    Null
76951790  Null      Open      Null
因此,我编写了一个游标来获取输出,游标返回如下语句:

  Select val_ID
    ,max(case when Col_ID = 3 then Value end) as Status
    ,max(case when Col_ID = 25 then Value end) as Status
   ,max(CASE WHEN Col_ID = 1 THEN VALUE END ) AS Country
    From Col_values
    Group by Val_ID
这使我的输出为:

Val_ID       Status    Country
76951792    Closed     US
76951791    Closed     Canada
76951790    Open       Null
76951789    Closed     Null
Val_ID    Status    Status    Country
76951792  Closed    Null      US
76951791  Closed    Null      Canada
76951789  Null      Closed    Null
76951790  Null      Open      Null
我怎样才能解决这个问题

select val_id, value as Status
from col_values

这就是你想要的产出。为什么您认为您需要对数据进行分组才能获得这些数据???

应该可以更改光标,使其生成如下sql:

select 
    val_id
    ,max(case when Col_name = 'Status' then Value end) as Status
    ,max(case when Col_name = 'Country' then Value end) as Country
from
    col_values v
    join ET_Col c on v.col_id=c.col_id

group by val_id

不同的是,您使用列名称而不是列id在列之间拆分,因此折叠的列名将合并。

请参阅我编辑的问题。我在表格中加入了更多的样本数据。因此,您可以看到我为什么要对dataPivot进行分组,这是您要寻找的关键词:非常类似于您知道术语规范化吗?这可以通过动态pivot表来完成:我刚刚给了您一些示例数据,但大约有100个Col_ID。所以我不能写SQl,这就是为什么我写游标,它给我上面写的select语句,我已经更新了。我认为,基于您已经能够生成的内容,您将能够相当容易地生成上面的sql。