基于字段值的SQL字符串连接

时间:2014-02-07 20:20:22

标签: c# sql sql-server vb.net

我想知道是否有一种直接在SQL中根据字段值连接字符串的方法。我知道最好在应用程序中执行,但在这种情况下,我只能使用SQL。例如,下表:

Labels | Qty | LabelQty | OutputString
-------+-----+----------+--------------
     1 |  30 |       30 | NULL
     2 |  60 |       30 | NULL
     2 | 120 |       60 | NULL

我想像这样结束OutputString:

Labels | Qty | LabelQty | OutputString
-------+-----+----------+--------------
     1 |  30 |       30 | 30|
     2 |  60 |       30 | 30|30|
     2 | 120 |       60 | 60|60|

我知道在C#或VB中这很容易做到,但我很难想到如何在直接SQL中实现这一点。我需要使用游标并一次做一行吗?不幸的是,我不能像Ruby一样使用字符串乘法器,例如:

SELECT (CONVERT(VARCHAR(10), LabelQty) + '|') * Labels

非常感谢任何指针。

3 个答案:

答案 0 :(得分:6)

您可以使用REPLICATE()功能:

select replicate(cast(LabelQty as varchar(100)) + '|', Labels)
from mytable_1

答案 1 :(得分:0)

你可以尝试

SELECT REPLICATE(CONVERT(VARCHAR(10), LabelQty ) + '|',Labels )

答案 2 :(得分:-2)

虽然您尚未描述如何生成输出字符串,但我认为可以使用case表达式完成此操作:

http://technet.microsoft.com/en-us/library/ms181765.aspx

来自该文章的样本:

SELECT   ProductNumber, Name, "Price Range" = 
      CASE 
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product
ORDER BY ProductNumber ;