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

C# 基于字段值的SQL字符串连接,c#,sql,sql-server,vb.net,C#,Sql,Sql Server,Vb.net,我想知道是否有一种直接在SQL中基于字段值连接字符串的简单方法。我知道最好在应用程序中这样做,但在这个例子中,我只能使用SQL。例如,下表: Labels | Qty | LabelQty | OutputString -------+-----+----------+-------------- 1 | 30 | 30 | NULL 2 | 60 | 30 | NULL 2 | 120 | 60 | NULL 我希望以这样

我想知道是否有一种直接在SQL中基于字段值连接字符串的简单方法。我知道最好在应用程序中这样做,但在这个例子中,我只能使用SQL。例如,下表:

Labels | Qty | LabelQty | OutputString
-------+-----+----------+--------------
     1 |  30 |       30 | NULL
     2 |  60 |       30 | NULL
     2 | 120 |       60 | NULL
我希望以这样的输出字符串结束:

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

非常感谢任何指针。

虽然您没有描述如何生成输出字符串,但我认为这可以通过case表达式实现:

以及该文章的样本:

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 ;

虽然您没有描述如何生成输出字符串,但我认为这可以通过case表达式实现:

以及该文章的样本:

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 ;
您可以使用复制功能:

select replicate(cast(LabelQty as varchar(100)) + '|', Labels)
from mytable_1
您可以使用复制功能:

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

SELECT REPLICATE(CONVERT(VARCHAR(10), LabelQty ) + '|',Labels )
你可以试试

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

outputstring输出背后的逻辑是什么?您必须告诉我们如何获得输出字符串的内容?是否希望LabelQty字段重复标签包含的次数,使用| between?重复LabelQty标签次数?正确,如底部选择所示。重复LabelQty字段Labels number of times.dub,底部的选择并不表示,因为*不是字符串的有效运算符,这将导致语法错误。这个要求最好使用英语。输出字符串输出背后的逻辑是什么?你必须告诉我们你是如何得到输出字符串的内容的?是否希望LabelQty字段重复标签包含的次数,使用| between?重复LabelQty标签次数?正确,如底部选择所示。重复LabelQty字段Labels number of times.dub,底部的选择并不表示,因为*不是字符串的有效运算符,这将导致语法错误。这个要求最好用英语。不,似乎很清楚,他希望标签重复的次数和标签栏一样多。@Vitaliy这不是他假装的,不是答案。不,似乎很清楚,他希望标签重复的次数和标签栏一样多。@Vitaliy这不是他假装的,不是答案。哇,我这辈子都到哪里去了!这正是我想要的,谢谢@dubstylee-REPLICATE一直在和你的孪生兄弟约会。1+回答太快。我收回了我的回答。哇,我这辈子都在哪里!这正是我想要的,谢谢@dubstylee-REPLICATE一直在和你的孪生兄弟约会。1+回答太快。我收回我的回答。