SELECT DISTINCT结果封装在VIEW中。

时间:2014-06-17 19:17:32

标签: mysql sql xml view

我遇到的问题是我的产品每天都有一个包含多行的表格。

如果产品在周一,周二和周四外出,则会有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)=等......

我在这里输了。

1 个答案:

答案 0 :(得分:0)

我是一个ms SQL人员,要实现这一点,我会使用一个执行此处理的函数,然后获取该函数以将字符串返回给视图。

我通常会将临时表声明为变量,然后使用所需的记录加载它,然后使用while循环将数据加载到字符串中,并将其作为最终值返回。

如果你能给我表格结构,我可能会为你敲一些示例代码。