2016-11-03 4 views
0

У меня есть следующий запрос:Две строки в одном столбце SQL Server

SELECT tbl_SampledParts.Data 
FROM tbl_SampledParts 
INNER JOIN tbl_Inspection ON tbl_SampledParts.InspectionId = tbl_Inspection.InspectionId 
WHERE (tbl_Inspection.InspectionDate BETWEEN '2016-10-26' AND '2016-11-03') 

Result

Вот что я получаю, но я хочу, чтобы показать результаты запроса только в одном столбце Я попытался с помощью COALESCE и XML запросы из ответов на этой странице, но я не знаю, как добавить мое внутреннее соединение и условия. Этот запрос показывает результаты, как я хочу:

DECLARE @test NVARCHAR(max) 

SELECT @test = COALESCE(@test + ',', '') + Data FROM tbl_SampledParts 

SELECT @test 

Но, как я сказал, что нужно мое внутреннее соединение и где условия обязательно, как я могу это сделать?

ОБНОВЛЕНИЕ: Даты могут меняться, поэтому причина, по которой мне нужно использовать условия, точно такие как WHERE (tbl_Inspection.InspectionDate between '2016-10-26' and '2016-11-03').

+0

Так у в основном хотят UNPIVOT данные и иметь его в одном столбце. Это верно? – Teja

+0

См. Ниже сообщение: http://stackoverflow.com/questions/9395444/concatenating-rows-from-a-stored-procedure-onto-another-table-in-tsql – shanyour

+0

@Teja Да, что-то в этом роде, право теперь я ищу информацию о pivot/univot, но у меня такая же проблема, я не знаю, как совместить это с моим внутренним соединением, где условие –

ответ

1

Вы можете комбинировать оба ваших запросов так:

DECLARE @test NVARCHAR(max); 

SELECT @test = COALESCE(@test + ',', '') + Data FROM (
SELECT tbl_SampledParts.Data FROM tbl_SampledParts 
INNER JOIN tbl_Inspection ON tbl_SampledParts.InspectionId = tbl_Inspection.InspectionId 
WHERE (tbl_Inspection.InspectionDate between '2016-10-26' and '2016-11-03') 
) as t; 

SELECT @test; 

вот это

+0

Возможно, есть синтаксическая ошибка, потому что я получаю 'Некорректный синтаксис рядом с ключевым словом 'Select' .' –

+1

ему нужен псевдоним после строки закрывающей скобки 6 –

+0

код изменен соответствующим образом –

0
create table Testdata(Data varchar(max)) 
insert Testdata select '3.6,1,5.6,7.5,9,2.2,4.6,2.3,6.4,6.5,5,3.7,6,5.4,3,1.5' 
insert Testdata select '50,3.72,50,3.72,50,3.72,50,3.72,65.3,72,50,3.72,45,3.72,..' 



with tmp(DataItem, Data) as (
select LEFT(Data, CHARINDEX(',',Data+',')-1), 
     STUFF(Data, 1, CHARINDEX(',',Data+','), '') 
from Testdata 
union all 
select LEFT(Data, CHARINDEX(',',Data+',')-1), 
     STUFF(Data, 1, CHARINDEX(',',Data+','), '') 
from tmp 
where Data > '' 
) 
select DataItem 
from tmp; 
Смежные вопросы