首页 > 解决方案 > 使用计算列值从同一源表中查找特定值

问题描述

我在 SQL Server 中有一个名为的表,ShippingDocSummary其中包含运输文件的所有历史记录。对于给定的文档编号,可以有任意数量的历史记录/交易。我想要做的是创建一个总结该表并计算各种列值的视图。当尝试根据来自同一源表的计算列值从源表中获取特定值时,我的问题就出现了。

以下是源表的简化示例:

DocNum    DocHistID    StatusCode   StatusQty    StatusDate
12345     10000001     AS1          2            2/16/2020
12345     10000002     D6T          2            4/20/2020
12345     10000003     COR          2            4/20/2020
12345     10000004     AS1          2             5/5/2020

到目前为止,我创建摘要的代码如下:

SELECT
  DocNum,
  SUM(CASE WHEN ShippingDocSummary.StatusCode LIKE 'AS_' THEN StatusQty ELSE 0 END) AS AS_QTY,
  SUM(CASE WHEN ShippingDocSummary.StatusCode LIKE 'D6T' THEN StatusQty ELSE 0 END) AS D6T_QTY,
  SUM(CASE WHEN ShippingDocSummary.StatusCode LIKE 'COR' THEN StatusQty ELSE 0 END) AS COR_QTY,
  MAX(CASE WHEN ShippingDocSummary.StatusCode LIKE 'AS_' THEN DocHistID ELSE null END) AS LastAS_DHID
FROM ShippingDocSummary
GROUP BY DocNum

这给了我以下信息,这是正确的:

DocNum    AS_QTY    D6T_QTY    COR_QTY    LastAS_DHID
12345     4         2          2          10000004

作为一列,我接下来想要得到的是与从选择中计算出StatusDate的值相关的LastAS_DHID那个(即我需要下一列显示“2020 年 5 月 5 日”,因为该日期与DocHistID“10000004”相关)。

在 Power Bi 中,我会使用一个lookupvalue函数,但是当我将逻辑传输到 SQL 服务器时,我认为我需要使用派生CASE WHEN类型的查询,但不确定如何构造语法。任何帮助是极大的赞赏!

标签: sqlsql-server

解决方案


也许你必须创建你的表,然后做一个左连接。话虽这么说,试试这个:

SELECT A.DocNum,
A.AS_QTY,
A.D6T_QTY,
A.COR_QTY,
A.LastAS_DHID,
B.StatusDate

        FROM (
                SELECT DocNum,
                       SUM(CASE WHEN ShippingDocSummary.StatusCode LIKE 'AS_' THEN StatusQty ELSE 0 END) AS AS_QTY,
                       SUM(CASE WHEN ShippingDocSummary.StatusCode LIKE 'D6T' THEN StatusQty ELSE 0 END) AS D6T_QTY,
                       SUM(CASE WHEN ShippingDocSummary.StatusCode LIKE 'COR' THEN StatusQty ELSE 0 END) AS COR_QTY,
                       MAX(CASE WHEN ShippingDocSummary.StatusCode LIKE 'AS_' THEN DocHistID ELSE null END) AS LastAS_DHID
                
                       FROM ShippingDocSummary
                       GROUP BY DocNum) A
        LEFT JOIN TABLE_WITH_DOCHIST_10000004 B
        ON A.LastAS_DHID = B.DocHistID

推荐阅读