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无法实现只对单列去重,并显示多列结果的解决方法

Oracle Distinct子句

第二十九章 SQL命令 DISTINCT

SELECT Count Distinct Syntax MS Access SQL [重复]

如何在同一 SQL 语句中使用 SELECT DISTINCT 和 CONCAT

SELECT DISTINCT 仅用于 Google 表格查询中的一列