【问题标题】:Comma Separated String逗号分隔字符串
【发布时间】:2015-01-05 07:47:33
【问题描述】:

我想使用 T-SQL 将我的表中选择签名的结果返回到逗号分隔的字符串中

这是我想要的

创建表格脚本

CREATE TABLE [dbo].[EVENT_TABLE](
    [ID_PERSON] [bigint] IDENTITY(1,1) NOT NULL,
    [ID_SIGNATURE] [bigint] NULL,
    [Name] [varchar](250) NULL,
    [Surname] [varchar](250) NULL,
    [Age] [varchar](250) NULL,
    [Department] [varchar](200) NULL,
 CONSTRAINT [PK_PERSON_TABLE] PRIMARY KEY CLUSTERED 
(
    [ID_PERSON] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

选择脚本

SELECT
DISTINCT
A.Department,
CASE 
WHEN SUM(A.PEOPLE) < 5 THEN '1 TO 4'
WHEN SUM(A.PEOPLE) >= 5 AND  A.PEOPLE < 10 THEN '5 TO 9'
WHEN SUM(A.PEOPLE) >= 10 THEN '10...N'
END
FROM
(
SELECT DISTINCT ID_SIGNATURE, Department, COUNT(NAME) AS PEOPLE
FROM EVENT_TABLE
GROUP BY ID_SIGNATURE, Department
) AS A
GROUP BY A.Department, A.PEOPLE

数据

结果

【问题讨论】:

  • 这与您的问题无关,但您不应将DISTINCTGROUP BY 一起使用。它只会使代码更加混乱。没有DISTINCT,输出将完全相同,因为GROUP BY 确保每一行都是唯一的。
  • @Dan 谢谢以后我不会将 DISTINCT 和 GROUP BY 一起使用

标签: sql-server tsql


【解决方案1】:

我希望这是您所需要的。您的代码中有两个不需要的东西,例如Distinct, Aggregate。试试这个。

;WITH cte
     AS (SELECT A.Department,
                CASE
                  WHEN A.PEOPLE < 5 THEN '1 TO 4'
                  WHEN A.PEOPLE >= 5 AND A.PEOPLE < 10 THEN '5 TO 9'
                  WHEN A.PEOPLE >= 10 THEN '10...N'
                END [Range],
                ID_SIGNATURE
         FROM   (SELECT ID_SIGNATURE,
                        Department,
                        Count(NAME) AS PEOPLE
                 FROM   EVENT_TABLE
                 GROUP  BY ID_SIGNATURE,
                           Department) AS A)
SELECT Department,
       [Range],
       (SELECT Stuff((SELECT ',' + CAST(ID_SIGNATURE AS varchar(20)) 
                      FROM   cte a
                      WHERE  a.Department = b.Department
                             AND a.[Range] = b.[Range]
                      FOR XML PATH ('')), 1, 1, '')) Signature
FROM   cte B
GROUP  BY Department,
          [Range]

【讨论】:

  • 我收到此错误消息 8114,级别 16,状态 5,第 1 行错误将数据类型 varchar 转换为 bigint。
  • CAST(ID_SIGNATURE AS varchar(20))
  • 谢谢谢谢谢谢谢谢:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多