【发布时间】:2017-08-10 20:33:08
【问题描述】:
以上已按:CustomerID、JobType、Book 和 Page 排序
最终目标是在一个或两个为空时填充 EndBook 和 EndPage 列(在此示例中,除了第 15 行之外的每一行)。目前我只是试图创建一个 SELECT 查询,该查询返回如下所示的同一张表,但在 EndBook 和 EndPage 列中填写了值。
我期望它的工作方式是......
- EndBook 将等于结果中下一行的 Book(按 CustomerID、JobType、Book 和 Page 排序时)。
- 例如:ID11 将是“ABCD”
- 例如:ID12 将是“ABCD”
- 例如:ID13 将是“ABT5”
- 例如:ID14 将是 ''(因为这是 typeA 的最后一个结果)
- 例如:ID15 将是“00A1”(单独保留,不包含在查询中(因为两端都已填写)
- 例如:ID16 将是 ''(因为这是 typeB 的最后一个结果)
- 例如:ID17 将是 ''(因为这是客户 586 的唯一 typeC)
- 例如:ID18 将是“1234”
- EndPage 将等于结果中下一行的 Page(按 CustomerID、JobType、Book 和 Page 排序时)。
- 例如:ID11 将是“126”
- 例如:ID12 将是 '150'
- 例如:ID13 将是 '021'
- 例如:ID14 将是 ''(因为这是 typeA 的最后一个结果)
- 例如:ID15 将是“005”(单独保留,不包含在查询中(因为两端都已填写)
- 例如:ID16 将是 ''(因为这是 typeB 的最后一个结果)
- 例如:ID17 将是 ''(因为这是客户 586 的唯一 typeC)
- 例如:ID18 将是 '013'
我目前有以下查询,但我似乎无法得到我想要的。在这个最新的尝试中,它只返回 4 个结果,而我期望它总共返回 9 个(除了 1 个)......
SELECT
job.CustomerID,
job.JobType,
job.Book,
job.Page,
job.EndBook,
job.EndPage,
next_inst.min_book,
next_inst.min_page
FROM JobList AS job
INNER JOIN
(
SELECT
jl2.CustomerID,
jl2.JobType,
MIN(jl3.Book) AS min_book,
MIN(jl3.Page) AS min_page
FROM JobList AS jl2
INNER JOIN
JobList AS jl3 ON jl3.Book>=jl2.Book AND jl3.Page>jl2.Page
GROUP BY jl2.CustomerID, jl2.JobType
) AS next_inst ON next_inst.min_book=job.Book AND next_inst.min_page=job.Page
WHERE job.EndBook='' or job.EndPage=''
ORDER BY job.CustomerID, job.JobType, job.Book, job.Page
【问题讨论】:
-
从您的 excel 复制并粘贴到此处:senseful.github.io/text-table 并单击
create table,然后使用问题中的文本表。
标签: sql sql-server sql-server-2016