我想知道如何将多个相关行投影到一行中,例如,多个部分的产品将具有多个SKU,但我想将多个部分投影到一行中。
我确信这是可能的,但很难定义查询以获得所需的结果。
给出示例数据集
我想将结果投射到以下
产品代码或产品名称列中的内容无关紧要,基本上我只需要一行代表这两行。
我将如何实现这一目标?
答案 0 :(得分:1)
这取决于ProductCode和ProductName中存储的数据格式。 根据这个,你必须编写适当的表达式来提取所有有用的数据。 然后,当然,你必须决定你将为新行留下什么ID。
在我的例子中,我使用substr(...)进行简单的转换以提取必要的数据, 我使用max(ID)来选择该行的ID。
测试数据:
insert table1(CustId, ProductCode, ProductName)
values
(10, 'Prod1Part1', 'Product1 Part1'),
(10, 'Prod1Part2', 'Product1 Part2'),
(10, 'Prod1Part3', 'Product1 Part3'),
(10, 'Prod2Part1', 'Product2 Part1'),
(10, 'Prod2Part2', 'Product2 Part2')
;
查询:
SELECT
(SELECT
MAX(id)
FROM
table1
WHERE
SUBSTR(ProductCode, 1, 5) = NewProductCode) id,
CustId,
NewProductCode,
NewProductName
FROM
(SELECT DISTINCT
CustId, SUBSTR(ProductCode, 1, 5) NewProductCode,
substr(ProductName, 1, instr(ProductName, ' ')) NewProductName
FROM
table1) x
输出:
8 10 Prod1 Product1
10 10 Prod2 Product2
清楚吗?如果不是,请让我改进答案。