Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL CSV作为查询结果列_Sql_Sql Server 2008 - Fatal编程技术网

SQL CSV作为查询结果列

SQL CSV作为查询结果列,sql,sql-server-2008,Sql,Sql Server 2008,我有下面的SQL,它查询单个表、单行,并以逗号分隔字符串的形式返回结果,例如 Forms 1, 10, 4 SQL: DECLARE @tmp varchar(250) SET @tmp = '' SELECT @tmp = @tmp + Form_Number + ', ' FROM Facility_EI_Forms_Required WHERE Facility_ID = 11 AND EI_Year=2012 -- single Facility, single year SELEC

我有下面的SQL,它查询单个表、单行,并以逗号分隔字符串的形式返回结果,例如

Forms
1, 10, 4
SQL:

DECLARE @tmp varchar(250)
SET @tmp = ''
SELECT @tmp = @tmp + Form_Number + ', '
FROM  Facility_EI_Forms_Required
WHERE Facility_ID = 11 AND EI_Year=2012 -- single Facility, single year
SELECT SUBSTRING(@tmp, 1, LEN(@tmp) - 1) AS Forms
Facility_EI_Forms_Required表中有三条Facility_ID=11的记录

Facility_ID EI_Year Form_Number
11  2012    1
11  2012    10
11  2012    4
Form_number是一个varchar字段

我有一个Facility表,其中包含Facility_ID和Facility_Name++

如何创建查询以查询给定年份的所有设施并生成CSV输出字段

到目前为止,我有:

DECLARE @tmp varchar(250)
SET @tmp = ''
SELECT TOP 100 A.Facility_ID, A.Facility_Name,
    (
    SELECT @tmp = @tmp + B.Form_Number + ', '
    FROM  B
    WHERE B.Facility_ID = A.Facility_ID 
    AND B.EI_Year=2012
    )
FROM Facility A, Facility_EI_Forms_Required B
但使用@tmp时会出现语法错误

我猜这对于查询来说太复杂了,可能需要一个存储过程,但我对SPs知之甚少。这可以通过嵌套查询完成吗

我尝试了一个标量值函数

ALTER FUNCTION [dbo].[sp_func_EI_Form_List] 
(
    -- Add the parameters for the function here
    @p1 int,
    @pYr int
)
RETURNS varchar
AS
BEGIN
    -- Declare the return variable here
    DECLARE @Result varchar

    -- Add the T-SQL statements to compute the return value here
    DECLARE @tmp varchar(250)
    SET @tmp = ''
    SELECT @tmp = @tmp + Form_Number + ', '
    FROM OIS..Facility_EI_Forms_Required
    WHERE Facility_ID = @p1 AND EI_Year = @pYr -- single Facility, single year

    SELECT @Result = @tmp -- SUBSTRING(@tmp, 1, LEN(@tmp) - 1)-- @p1

    -- Return the result of the function
    RETURN @Result

END
电话

select Facility_ID, Facility.Facility_Name, 
   dbo.sp_func_EI_Form_List(Facility_ID,2012)
from facility where Facility_ID=11
返回

Facility_ID Facility_Name   Form_List
11  Hanson Aggregates   1

因此,它只返回第一条记录,而不是全部三条记录。我做错了什么?

试试下面的方法,这是一个与答案类似的方法。我希望它是正确的,因为如果没有模式和一些演示数据,我就无法尝试。也许您可以在问题中添加模式和数据:

选择不同的A.Facility\u ID、A.Facility\u Name、, 子串 选择“,”+B.Form_编号作为[文本] 根据设施要求填写表格B 其中B.Facility\u ID=A.Facility\u ID B.EIU年份=2012年 按B.F.U.ID订购 对于XML路径 ,21000[表格清单] 从设施A 工作得很好!对于XML。。。在我看来是有点黑魔法。产生一个结果,但不知道如何产生。我想是和regex在同一个班级。