【发布时间】:2021-11-03 20:46:27
【问题描述】:
下面的查询是提取每个 sku 的最大 exdt/seq 字段的记录。问题不是只从 WHERE 语句中提取项目 5343553,而是提取所有 5343553 的日期/序列相同的项目。所以在这种情况下,它会收集 100 多条不同项目的记录,这些记录等于 5343553 的最大日期 7/1,seq 2。
SELECT *
FROM
(SELECT
item, cpp, exdt, seq, tv_1 + tf_1 AS tt_1
FROM
dbo.sample123) t
PIVOT
(SUM(tt_1) FOR cpp IN ([M], [LL], [OH] AS pvtc
WHERE
(exdt = (SELECT MAX(exdt) AS exdtmax
FROM dbo.sample123 AS b
WHERE (LTRIM(item) IN ('5343553')))
AND (seq = (SELECT MAX(seq) AS seqmax
FROM dbo.sample123 AS b
WHERE (LTRIM(item) IN ('5343553')))))
所以我想的很简单,我将删除 WHERE,它应该给我所有 sku 及其最大日期/序列。下面反而返回空白,没有数据?
SELECT *
FROM
(SELECT
item, cpp, exdt, seq, tv_1 + tf_1 AS tt_1
FROM dbo.sample123) t
PIVOT
(SUM(tt_1) FOR cpp IN ([M], [LL], [OH] AS pvtc
WHERE
(exdt = (SELECT MAX(exdt) AS exdtmax
FROM dbo.sample123 AS b))
AND (seq = (SELECT MAX(seq) AS seqmax
FROM dbo.sample123 AS b))
我不确定我错过了什么。任何帮助将不胜感激!
谢谢。
【问题讨论】:
-
格式正确的 SQL 更易于阅读和编写。
-
Microsoft SQL SMSS
-
请提供minimal reproducible example,除了您的查询之外,还提供示例数据和所需结果。
-
在子查询中使用别名:
MAX(b.exdt)、MAX(b.seq)。 -
我试过了,还是不行。
标签: sql sql-server tsql where-clause