【问题标题】:SELECT DISTINCT result encapsulated in a VIEW.SELECT DISTINCT 结果封装在 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...

我在这里不知所措。

【问题讨论】:

    标签: mysql sql xml view


    【解决方案1】:

    我是一个 ms SQL 人员,为了实现这一点,我将使用一个执行此处理的函数,然后让该函数将字符串返回到视图。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-04
      • 2015-07-20
      • 2019-02-03
      • 2017-07-23
      • 2014-08-24
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多