【问题标题】:SQL - How to add a custom text at the beginng of a rowSQL - 如何在行首添加自定义文本
【发布时间】:2013-11-01 12:31:02
【问题描述】:

我有一个 sql 查询将所有行合并为一个。

我尝试的是在开始时只设置一个自定义。

我的问题是总是为每个新值重复它。

我该如何解决?

提前致谢

这是我的代码:

SELECT 
   STUFF ((SELECT 'Please Select' + ' : ' + Name
          FROM Option
          ORDER BY Name
          FOR XML PATH('')), 1, 2, '') MergeResult

我需要的结果是这样的:

请选择:选项1 - 选项2 - 选项3等......

我现在得到的是这样的:

请选择:选项1 - 请选择:选项2 - 请选择:选项3

【问题讨论】:

  • 这是微软,不是 MySQL - 对吧?
  • 只需将'Please Select' + ' : ' +从内部查询移动到STUFF之前

标签: mysql sql sql-server


【解决方案1】:

有几种方法可以做到这一点。

将 Select 移到外面:

DECLARE @Option AS TABLE ([Name] varchar(30))
INSERT INTO @Option([Name])
VALUES ('Option1'), ('Option2'), ('Option3')


SELECT 'Please Select : ' + LEFT(Options, LEN(Options) - 2)
FROM 
(
    SELECT Name + ' - '
    FROM @Option
    ORDER BY Name
    FOR XML PATH('')
) o (Options)

还有COALESCE方式:

DECLARE @Option AS TABLE ([Name] varchar(30))
INSERT INTO @Option([Name])
VALUES ('Option1'), ('Option2'), ('Option3')

DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ' - ', '') + Name 
FROM @Option
SELECT 'Please Select : ' + @Names

【讨论】:

  • 是的。你是对的......它的工作......呵呵。非常感谢
【解决方案2】:

类似这样的:

SELECT 
    'Please Select' + ' : ' + 
    STUFF ((SELECT Name
          FROM [Option]
          ORDER BY Name
          FOR XML PATH('')), 1, 2, '') MergeResult

即将前缀移到外面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多