2014-06-17 40 views
0

我遇到的问题是,我有一个表格,每天都有一个产品正在发货。将SELECT DISTINCT结果封装在VIEW中。

如果产品走出去,周一,周二,周四会有导致

ID rtedat 
1  M 
2  T 
3  H 

我试图返回每个产品一个字符串3个条目。

这是从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)=等等......

我在这里输了。

回答

0

我是一个MS SQL人员,为了实现这一点,我将使用一个函数完成此处理,然后获取该函数以返回字符串视图。

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

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