SELECT DISTINCT 结果封装在 VIEW 中。
Posted
技术标签:
【中文标题】SELECT DISTINCT 结果封装在 VIEW 中。【英文标题】:SELECT DISTINCT result encapsulated in a VIEW. 【发布时间】:2014-06-17 19:17:32 【问题描述】:我遇到的问题是,我有一张表格,其中包含每天运送产品的多行。
如果产品在周一、周二和周四发布,则会有 3 行条目导致
ID rtedat
1 M
2 T
3 H
我试图为每个产品返回一个字符串。
这是我正在使用的 VIEW 的原始代码
SELECT TOP (1) rtedow
FROM dbo.CUSTROUTE AS i
WHERE (cusnum = dbo.CUSTOMER.cusnum) AND (co_num = dbo.CUST_CO.co_num) AND (rternk = '1')
ORDER BY credat, cusrtetky) AS main_rte_days
问题是顶部(1)。视图中的逻辑不适合多天。
我需要更改它以生成一个看起来像 M、T、H 的单个字符串
我尝试的这段代码可以正常工作,但我遇到的问题是,一旦我尝试将其插入到视图中,它返回第一次选择后的“=”无效。不知道那里发生了什么。
DECLARE @combinedString VARCHAR(MAX)
SELECT @combinedString = COALESCE(@combinedString + ', ', '') + rtedow
FROM dbo.CUSTROUTE
WHERE (cusnum = dbo.CUSTOMER.cusnum) AND (co_num = dbo.CUST_CO.co_num) AND (rternk = '1')
SELECT @combinedString as rtedow
然后我尝试了另一种有人建议使用 XML 的方式
SELECT DISTINCT rtedow
FROM dbo.CUSTROUTE v1
CROSS APPLY ( SELECT rtedow + ','
FROM dbo.CUSTROUTE v2
WHERE (v2.cusnum = dbo.Customer.cusnum) = (v1.cusnum = dbo.Customer.cusnum)
AND (v2.co_num = dbo.CUST_CO.co_num) = (v1.co_num = dbo.CUST_CO.co_num)
AND (rternk = '1')
ORDER BY ID
FOR XML PATH('') ) D ( rtedow )
WHERE (cusnum = dbo.CUSTOMER.cusnum) AND (co_num = dbo.CUST_CO.co_num) AND (rternk = '1')
但我相信问题出在 WHERE (v2.cusnum = dbo.Customer.cusnum) = etc...
我在这里不知所措。
【问题讨论】:
【参考方案1】:我是一个 ms SQL 人员,为了实现这一点,我将使用一个执行此处理的函数,然后让该函数将字符串返回到视图。
我通常会将临时表声明为变量,然后将其与所需记录一起加载,然后使用 while 循环将数据加载到字符串中,并将其作为最终值返回。
如果你能给我表格结构,我可能会为你敲出一些示例代码。
【讨论】:
以上是关于SELECT DISTINCT 结果封装在 VIEW 中。的主要内容,如果未能解决你的问题,请参考以下文章
MySQL_select distinct无法实现只对单列去重,并显示多列结果的解决方法
SELECT Count Distinct Syntax MS Access SQL [重复]