顧客テーブル -------------- ID名 1 ジェームス 2 ピーター
注文表 --------------- OrderId CustId 100 1 101 1 102 2
このようなものを返すクエリを作成するにはどうすればよいですか
ID、名前、注文リスト 1、ジェームズ、「100,101」 2、ピーター、「102」
Sybaseには、使用できるLISTという関数がありましたが、SQL SERVERには同様の関数が見つかりません
顧客テーブル -------------- ID名 1 ジェームス 2 ピーター
注文表 --------------- OrderId CustId 100 1 101 1 102 2
このようなものを返すクエリを作成するにはどうすればよいですか
ID、名前、注文リスト 1、ジェームズ、「100,101」 2、ピーター、「102」
Sybaseには、使用できるLISTという関数がありましたが、SQL SERVERには同様の関数が見つかりません
してみてください:
select ID, [Name],
(select OrderID+',' from OrderTable where CustID=ID
group by OrderID for xml path('')) AS ListOfOrders
From CustomerTable
以下に示すように、ユーザー定義関数を作成します
CREATE FUNCTION [dbo].[CommaSeperatedOrderIDs](@CustId INT) returns varchar(Max)
AS
BEGIN
DECLARE @CommaSeperatedValues VARCHAR(MAX)
SELECT @CommaSeperatedValues = COALESCE(@CommaSeperatedValues+',' , '') + OrderID
FROM OrderTable WHERE CustId = @CustId
RETURN @CommaSeperatedValues
END
その後、
select ID, [Name], ([dbo].[CommaSeperatedOrderIDs](ID)) AS ListofOrders
From CustomerTable
Sheikh Haris のリンクから詳細を追加します。
このテーブルを考えると:
次のような出力を取得するには:
次の SQL を使用します。
SELECT field1,
Substring(convert(varchar(100),
(
SELECT (', ' + field2)
FROM #test t2
WHERE t1.field1 = t2.field1
ORDER BY field1, field2
FOR XML PATH( '' )
)), 3, 1000 )
FROM #test t1
GROUP BY field1
WIDEMEMO フィールドが表示されるように、部分文字列に変換関数を追加しました (SQL Server)
以下のリンクにある非常にシンプルで便利なソリューションです。
そのリンクに書かれている SQL クエリは画像になっているので、ここにコピーできませんでした。