我有以下查询,其中我按帐户和版本号连接产品和报价列表。
SELECT DISTINCT ST2.Account_No, ST2.version_num,
substring((SELECT ',' + ST1.ProductNo AS [text()]
FROM (SELECT DISTINCT Account_No, version_num, ProductNo, QuoteNo, RowNo
FROM uAccountProductInfo) ST1
WHERE ST1.version_num = ST2.version_num
AND ST1.Account_No = ST2.Account_No
ORDER BY ST1.RowNo, ST1.Account_No,ST1.version_num
FOR XML PATH (''))
, 2, 1000) [AllProduct]
,
substring((SELECT ','+ ST3.QuoteNo AS [text()]
FROM (SELECT DISTINCT Account_No, version_num, ProductNo, QuoteNo, RowNo
FROM [uAccountProductInfo]) ST3
WHERE ST3.version_num = ST2.version_num
AND ST3.Account_No = ST2.Account_No
ORDER BY ST3.RowNo, ST3.version_num
FOR XML PATH (''))
, 2, 1000) [AllQuote]
FROM uAccountProductInfo ST2
我遇到的问题是返回值没有显示明显的结果。我理解它发生的原因,但无法弄清楚如何调整它。
返回结果看:
Account version_num AllProduct AllQuote
1 2 aaa,aaa,aaa 111,111,111
1 3 aaa,aaa,bbb 111,111,222
我想要的是
Account version_num AllProduct AllQuote
1 2 aaa, 111
1 3 aaa,bbb 111,222
测试数据是这样的:
Account version_num LOB Package Product Quote RowNo
1 2 GL 1 aaa 111 1
1 2 AU 1 aaa 111 2
1 2 PF 1 aaa 111 3
1 3 GL 1 aaa 111 1
1 3 AU 1 aaa 111 2
1 3 WK 0 bbb 222 3
他们返回同一产品的多个实例的原因|引用是由于包含RowNo
列。我之前将其排除在之前返回了不同的值列表,但我需要按RowNo排序,以便值按特定顺序排列。
我整个上午一直在捣乱我的大脑,但无法弄清楚如何调整查询以仅返回顶级的不同值。
有什么建议吗?
n.b。 - 这是一个更大的查询的一部分,但是一旦这个子查询被解析,它应该流入主要的一个就好了(至少我认为)。如果有人需要,我可以发布主查询。
答案 0 :(得分:3)
我更喜欢substring()
而不是select distinct
来删除分隔字符。但是,您需要的是子查询中的group by
或stuff((SELECT ',' + ST1.ProductNo AS [text()]
FROM uAccountProductInfo ST1
WHERE ST1.version_num = ST2.version_num AND
ST1.Account_No = ST2.Account_No
GROUP BY ST1.ProductNo
ORDER BY MIN(ST1.RowNo)
FOR XML PATH ('')
), 1, 1, '')
:
SELECT DISTINCT
您的附加子查询是多余的。实际上,这是误导性的,因为您正在使用ProductNo
并期望它每RowNo
返回一行 - 即使存在其他列中具有不同值的多行。
请注意,排序不清楚。这基于最小[...]/jdk/make/src/classes/build/tools/taglet/ExtLink.java:37: error: cannot find symbol
import jdk.javadoc.doclet.Taglet;
^
symbol: class Taglet
location: package jdk.javadoc.doclet
。