sql - 组合多行以创建具有相同 ID 的新行

标签 sql sql-server

我正在尝试将表格式修改为新格式,这将有助于我正在开发的新 .Net 应用程序。更改很简单,但我无法解决。

以下是当前格式的示例:

 RecoNumber   Position  Type            Length     

 NO VON-01    Top       Spiralbelt      44.27274    
 NO VON-01    Bottom    Venta Trac      13.10656    
 ACMHAPA-01   Top       Rhino Hyde-B    28.12       
 ACMHAPA-01   Lagging   OPL-35          0           
 ADVGRMI-01   Top       Spirabelt 1.05  35.40905    
 ADVGRMI-01   Bottom    Venta Trac-B    13.05474    
 ADVGRMI-01   Lagging   BMD-6           0           

下面是最终格式的示例:

RecoNumber   TopType         BtmType       LaggingType   TopLength   BtmLength   LaggingLength   

NO VON-01    Spiralbelt      Venta Trac    NULL          44.27274    13.10656    NULL
ACMHAPA-01   Rhino Hyde-B    NULL          OPL-35        28.12       NULL        0
ADVGRMI-01   Spirabelt 1.05  Venta Trac-B  BMD-6         35.40905    13.05474    0

我尝试使用 Group By 或 Row_Number() 函数来合并,但无法使其工作。到目前为止,我最接近的尝试是隔离每个单元格,但我无法将它们全部合并到一行中。

这是我目前所处的位置:

SELECT  RecoNumber,
        CASE WHEN (Position = 'Top') THEN Type ELSE NULL END as TopType,
        CASE WHEN (Position = 'Top') THEN Length ELSE NULL END as TopLength,
        CASE WHEN (Position = 'Bottom') THEN Type ELSE NULL END as BtmType,
        CASE WHEN (Position = 'Bottom') THEN Length ELSE NULL END as BtmLength,
        CASE WHEN (Position = 'Lagging') THEN Type ELSE NULL END AS LaggingType,
        CASE WHEN (Position = 'Lagging') THEN Length ELSE NULL END as LaggingLength
FROM Workbook2014_Test.dbo.RecoBeltsOld

result:

RecoNumber  TopType        TopLength  BtmType      BtmLength    LaggingType    LaggingLength

NO VON-01   Spiralbelt     44.27274   NULL         NULL         NULL           NULL
NO VON-01   NULL           NULL       Venta Trac   13.10656     NULL           NULL
ACMHAPA-01  Rhino Hyde-B   28.12      NULL         NULL         NULL           NULL
ACMHAPA-01  NULL           NULL       NULL         NULL OPL-35  0
ADVGRMI-01  Spirabelt 1.05 35.40905   NULL         NULL         NULL           NULL
ADVGRMI-01  NULL           NULL       Venta Trac-B 13.05474     NULL           NULL
ADVGRMI-01  NULL           NULL       NULL         NULL         BMD-6          0

谢谢你的任何提示,西蒙

最佳答案

您可以使用 group by 将它们全部放在同一 RecoNumber 行上。

SELECT  RecoNumber,
        max(CASE WHEN (Position = 'Top') THEN Type ELSE NULL END) as TopType,
        max(CASE WHEN (Position = 'Top') THEN Length ELSE NULL END) as TopLength,
        max(CASE WHEN (Position = 'Bottom') THEN Type ELSE NULL END) as BtmType,
        max(CASE WHEN (Position = 'Bottom') THEN Length ELSE NULL END) as BtmLength,
        max(CASE WHEN (Position = 'Lagging') THEN Type ELSE NULL END) AS LaggingType,
        max(CASE WHEN (Position = 'Lagging') THEN Length ELSE NULL END) as LaggingLength
FROM Workbook2014_Test.dbo.RecoBeltsOld
group by RecoNumber

关于sql - 组合多行以创建具有相同 ID 的新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30984171/

相关文章:

sql - 我应该在查找表中使用代码吗

sql - Excel 到 SQL 远程更新到特定用户

c# - 混合 System.Transactions 与 SqlTransactions

c# - SQL Server数据库响应时间慢的问题

mysql - sql/mysql 过滤器只包括最大值

php - 与 MysQL DATEDIFF 函数不一致

python - 无法使用 django-mssql 提供程序

sql-server - SSIS 将 .csv 日期字段转换为生产 SQL 服务器上的不正确格式

MySQL按一列分组,但选择所有数据

mysql - 不断收到外键错误