【问题标题】:Combine Multiple Rows into One Row (One Column) when Using SQL使用 SQL 时将多行合并为一行(一列)
【发布时间】:2015-02-10 03:22:07
【问题描述】:

如何将多行合并为一行:

Example:
ID   NAME    NUMBER
24   infill  20
25   test1   10
26   test2   30
27   test5   35
28   test3   40

SELECT 
      name,
      number 
FROM table1 WHERE table1.id IN (24,26,28)

他们的结果是:

NAME    NUMBER
infill  20
test2   30
test3   40

如何修改上面的 SQL 语句:我有一个我真正想要的列名。

服务

infill 20,test2 30, test3 40

我做到了:

select name + " " + number as Service 
from table1
where table1.id in (24,26,28)

结果为NULL,谢谢大家回答我的问题。

【问题讨论】:

标签: sql sql-server return


【解决方案1】:

你很接近,因为你试图将 varchar 与 Int 连接,所以 concat 不起作用的原因。

为了连接,两列必须是相同的数据类型,试试这样:

SELECT name + ' ' + Convert(nvarchar(max), number) AS Service 
FROM table1
WHERE table1.id IN (24,26,28)

【讨论】:

  • 感谢 Paresh,结果给出了 3 行作为原始数据。问题依然存在。
【解决方案2】:

这样试试

  DECLARE @MyTable TABLE
  (
     ID     INT,
     NAME   VARCHAR(100),
     NUMBER INT
  )

INSERT INTO @MyTable
VALUES      (24,
             'infill',
             '20'),
            (25,
             'test1',
             '10'),
            (26,
             'test2',
             '30'),
            (27,
             'test5',
             '35'),
            (28,
             'test3',
             '40')

SELECT stuff((SELECT ',' + NAME + ' ' + CONVERT(VARCHAR(100), NUMBER)
              FROM   @MyTable
              WHERE  id IN ( 24, 26, 28 )
              FOR XML PATH('')), 1, 1, '') AS SERVICE 

【讨论】:

  • 谢谢,NewUser,它成功了,再次感谢,我可以回家了,这个问题我在工作中花了2个多小时才解决这个问题,我的老板很不高兴,但是明天他会的。
  • 如何将列命名为“SERVICE”?结果为(无列名),非常感谢新用户
  • 我已经编辑了我的代码,请现在检查。如果对你有用,请选择我的答案。
  • 它有效,谢谢,祝你有美好的一天,我现在在堪培拉(澳大利亚)开始新的工作日。祝大家有个美好的一天。
【解决方案3】:

这里是

DECLARE @Str Varchar(max) = ''
SELECT @Str = @Str + Name + ' ' + CAST(Number As varchar) + ', ' AS Service FROM table1
WHERE table1.id in (24,26,28)
SELECT SUBSTRING(@Str, 0, LEN(@Str) - 2) AS Result

更新:

更简单

DECLARE @Str Varchar(max) 
SELECT @Str = COALESCE(@Str + ', ','') + Name + ' ' + CAST(Number As varchar) AS Service
FROM table1
WHERE table1.id in (24,26,28)
SELECT @Str AS Result

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多