2015-11-09 2 views
0

Мне нужно написать SQL-запрос, чтобы извлечь некоторые данные.Различные запросы SQL Select

у меня есть эти данные в моей таблице:

ID Store Value 
1 9921 NOK 
2 9921 NOK1 
3 9921 OK3 

то, что мне нужно, чтобы получить данные из запроса на выборку, как эту форму:

9921   NOK,NOK1,OK3 

Любая помощь пожалуйста?

+0

Какой двигатель базы данных? Чтобы сделать это в Apache Derby, мне пришлось написать определяемый пользователем агрегатор, который объединял строки. Тогда я мог бы запустить 'select store, uda (value), где store = 9921'. – cxw

+0

Я использую чистый SQL-сервер –

+1

Возможный дубликат [Объединить много строк в одну текстовую строку?] (Http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text- string) –

ответ

0

Вы можете использовать STUFF:

SELECT DISTINCT Store, 
     STUFF((SELECT ',' + Value 
       FROM Your_Table 
       WHERE Store = 9921 
       FOR XML PATH('')), 1, 1, '') 
FROM Your_Table 
+1

Как вы знаете, магическая конкатенация достигается бит 'FOR XML PATH ('') этого запроса. Все, что делает 'STUFF', это удаление ведущей запятой. Ссылаясь на это как «использование STUFF», нужно сильно пропустить точку в том, как работает этот запрос. –

0

Попробуйте выполнить свой Освобожденный вывод с помощью COALESCE;

Создать образец таблицы для целей тестирования

CREATE TABLE SampleData (id INT ,store INT ,value NVARCHAR(50)) 

INSERT INTO SampleData VALUES (1 ,9921 ,'NOK') 
INSERT INTO SampleData VALUES (2 ,9921 ,'NOK1') 
INSERT INTO SampleData VALUES (3 ,9921 ,'NOK2') 

Создать скалярная функция

Alter FUNCTION fun_GetCombinedData 
(
    @store int 
) 
RETURNS nvarchar(max) 
AS 
BEGIN 
-- Declare the return variable here 
DECLARE @CombineValue nvarchar(max) 

SELECT @CombineValue = COALESCE(@CombineValue + ', ', '') + value 
FROM SampleData where [email protected] 

RETURN @CombineValue 

END 
GO 

Final Query,

SELECT store 
,dbo.fun_GetCombinedData(store) AS value 
FROM SampleData 
GROUP BY store 

Ожидаемый выход:

store | value 
------------------------ 
9921 | NOK,NOK1,NOK2 

Это один из способов упростить ваш запрос выбора.

0

С помощью T-SQL мы можем сделать это следующим образом:

declare @store int = 9921, @values varchar(max) = '' 

select @values = @values 
    + case 
     when @values = '' then '' 
     else ',' 
     end + value 
    from table_name 
where store = @store 
order by id 

select @store, @values 
-1

пройти через это ниже пример

Demo: [SQLFiddle]

вы увидите ожидаемый результат, как "CombineValues"

store CombineValues 
9921 NOK,NOK1,NOK2 
+0

YOU CHAMP :) его работа очень хорошо спасибо. –

+0

Этот ответ может быть связан с включением (все/соответствующей частью) фактического кода. Мы не согласны с ответами «ссылка только» здесь, где невозможно понять смысл ответа, просто прочитав его. –

+0

Да ладно, что здесь не так? У меня была такая же трудность один раз в моем проекте, и вот ответ, это неправильное решение? –