2014-02-07 4 views
0

Мне интересно, существует ли простой способ конкатенации строки на основе значения поля непосредственно в SQL. Я знаю, что было бы предпочтительнее делать в приложении, но в этом случае я могу использовать только 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 

Все указатели очень ценятся.

+1

Какова логика вывода выходной строки? – Miller

+1

Вы должны рассказать нам, как вы попадаете на содержимое выходной строки? Вы хотите, чтобы поле LabelQty повторяло количество раз, когда ярлыки содержат '' 'между? – Hogan

+0

Повторяя количество меток LabelQty? – Miller

ответ

6

Вы можете использовать функцию REPLICATE():

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

Ничего себе, где 'REPLICATE()' была вся моя жизнь! Это именно то, что я искал, спасибо! –

+2

@dubstylee - 'REPLICATE()' встречается со своим братом-близнецом. – Hogan

+1

1+ для слишком быстрого ответа. Я снимаю свой ответ. – Miller

-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 ; 
+0

Нет, кажется, он хочет, чтобы метка повторялась столько раз, сколько столбец «Ярлыки». – Hogan

+1

Это явно не то, что требуется. – Szymon

+0

@ Виталий это не то, что он притворился, а не ответ. –

0

Вы можете попробовать

SELECT REPLICATE(CONVERT(VARCHAR(10), LabelQty) + '|',Labels) 
Смежные вопросы