私は、単一のテーブル、単一の行を照会し、結果をカンマの別の文字列として返します。クエリ結果としてのSQL CSV列
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
ための3つのレコードを有するvarchar型のフィールドです。
私はFacility_IDとFacility_Name ++を持つFacilityテーブルを持っています。
特定の年のすべての施設を照会し、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使用して構文エラーを取得しますSPの知識はほとんどありません。ネストされたクエリでこれを行うことはできますか?
私はそれが唯一の代わりに、3つのすべての最初のレコードを返している。コールに
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
をスカラー値機能を試してみました私は間違って何をしていますか?
Worked great! 'For XML ...'は黒い魔法のIMOのビットです。結果は得られるが、方法については手がかりがない。正規表現と同じクラスで私は推測する。 – rheitzman