2016-11-03 91 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

这就是我得到的,但我想,以显示只有一列的查询结果我尝试使用COALESCEXML查询答案在这个页面,但我不知道如何添加我的内部连接和条件。该查询显示的结果就像我想:

DECLARE @test NVARCHAR(max) 

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

SELECT @test 

但是就像我说我需要我的内连接和有条件强制性的,我该怎么办呢?

UPDATE:日期可以更改,这就是为什么我需要使用与此条件完全相同的原因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/unpivot的一些信息,但我有同样的问题,我不知道如何将它与我的内部联接结合在一起条件 –

回答

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

也许有一个语法错误,因为我得到'关键字'选择'附近的语法错误。' –

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