sql - 使用计算列值从同一源表中查找特定值
问题描述
我在 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
类型的查询,但不确定如何构造语法。任何帮助是极大的赞赏!
解决方案
也许你必须创建你的表,然后做一个左连接。话虽这么说,试试这个:
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
推荐阅读
- sorting - 数值和字符串值的多级排序
- java - 在 Java Spring Boot 中将列表转换为分组列表
- c# - 使用键入用户自动完成组合框并从数据库中获取相关数据
- reactjs - 尝试将 AWS Lex 聊天机器人嵌入 React 站点,失败并出现错误:配置中缺少凭证(有关详细信息,请参阅控制台)
- facebook - Django-allauth:显示进度条的 Facebook 弹出窗口
- c++ - period 必须是 C++17 chrono 库中比率的专门化吗?
- c# - C# 中的 XmlWriter 编码
- regex - 使用 xdigit 在 Perl 中验证十六进制值
- javascript - 如何将值从引导弹出文本框传输到 asp.net 中的父页面文本框?
- git - 如何解决 tfs 中的这些错误“[error]Git checkout failed with exit code: 1”