【问题标题】:SQL Server Converting Rows to ColumnsSQL Server 将行转换为列
【发布时间】:2016-07-12 04:48:05
【问题描述】:

我目前正在使用 3 个不同的表提取数据,下面是输出。

当前结果:

使用的查询:

SELECT        
    dbo.TableB.TrackingID, dbo.TableA.FinancialID, 
    dbo.TableA.ParcelCode, dbo.TableA.TotalAmount, 
    dbo.TableB.FinanceType, dbo.TableB.TransactionType, 
    dbo.TableC.CustID
FROM
    dbo.TableA 
INNER JOIN
    dbo.TableB ON dbo.TableA.FinancialID = dbo.TableB.FinancialID 
INNER JOIN
    dbo.TableC ON dbo.TableB.TrackingID = dbo.TableC.TrackingID
WHERE
    (dbo.TableB.TrackingID = '17006218AU')

我想要以下输出:

期望的输出:

【问题讨论】:

  • 寻找Pivot/Cross Tab/Conditional Aggregate
  • 提供源数据(或垃圾版本)而不是简单的图片(它们也有帮助),任何有助于我们重复您的问题的方法都会有很大帮助。否则,如果有猜测的话,就有点猜测了。
  • @Prdp 在将问题标记为重复之前,您应该查看当前结果和所需输出。问题的标题不正确 - 它与 Pivot 无关,因此不应将其作为重复项关闭
  • @dotnetom - 请再次检查当前结果和预期结果,它需要Pivot。我在将其标记为重复之前进行了检查;)
  • @Prdp 不,它不需要 Pivot,您可以通过分组完美解决这个问题。删除重复项,我将在没有 Pivot 的情况下发布答案。

标签: sql sql-server database


【解决方案1】:

您可以通过分组和CASE 聚合函数中的一些CASE 语句获得所需的输出:

SELECT
    dbo.TableB.TrackingID, 
    dbo.TableA.ParcelCode, 
    dbo.TableC.CustID,
    SUM(CASE WHEN dbo.TableB.FinanceType = 'Invoice' THEN dbo.TableA.TotalAmount ELSE 0 END) AS TotalAmount,
    SUM(CASE WHEN dbo.TableB.FinanceType = 'Invoice' AND TransType='Card' THEN dbo.TableA.TotalAmount ELSE 0 END) AS CardInvoice,
    SUM(CASE WHEN dbo.TableB.FinanceType = 'Invoice' AND TransType='Cash' THEN dbo.TableA.TotalAmount ELSE 0 END) AS CashInvoice,
    SUM(CASE WHEN dbo.TableB.FinanceType = 'PaymentRecepit' THEN dbo.TableA.TotalAmount ELSE 0 END) AS CardPaymentRecepit
FROM dbo.TableA 
    INNER JOIN dbo.TableB ON dbo.TableA.FinancialID = dbo.TableB.FinancialID 
    INNER JOIN dbo.TableC ON dbo.TableB.TrackingID = dbo.TableC.TrackingID
WHERE
    dbo.TableB.TrackingID = '17006218AU'
GROUP BY 
    dbo.TableB.TrackingID, 
    dbo.TableA.ParcelCode, 
    dbo.TableC.CustID

【讨论】:

  • 你看过我的第一条评论了吗?我建议的副本有类似的答案。这是一个重复的问题
  • @Prdp 您建议的副本具有PIVOT 相关的已接受答案,以及一个建议子查询作为解决方案的答案,但是没有一个答案建议条件聚合。我同意可能有几十个重复的答案与我提供的答案相似,但绝对不是您建议的答案。
  • 谢谢@dotnetom :)
猜你喜欢
  • 2021-02-24
  • 2010-10-22
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多