行間を結合するユーザ定義関数の利用
データのカーディナリティが違う場合。
通常は別の表にする。
でもグループ化したときに数値をSUMするようなイメージで、
文字列も結合したいべ。
そういう時はユーザ定義関数を作ってしまう。
CREATE FUNCTIONね。
引数にidとかを渡して、カーソルを使えばよい。
クライアントがアクセスとかの場合はそのユーザ定義関数を使ったVIEWを
用意しておいて、それにリンクテーブルしてもらえば良い。
サンプル
CREATE FUNCTION [dbo].[getItemText] (@id as integer)
RETURNS varchar(1024)
BEGINDECLARE @ret as varchar(512)
DECLARE @name as varchar(64)
DECLARE @cnt as integerSET @ret = ''
DECLARE item CURSOR FOR
SELECT
CASE WHEN M_DELI_STUFF.id = 23 THEN R_SECOND_SOKO_DELI_STUFF.deli_stuff_text ELSE M_DELI_STUFF.name END AS name,
R_SECOND_SOKO_DELI_STUFF.cnt
FROM
M_SECOND_COMMON
LEFT JOIN R_SECOND_SOKO_DELI_STUFF ON M_SECOND_COMMON.id = R_SECOND_SOKO_DELI_STUFF.second_id
LEFT JOIN M_DELI_STUFF ON R_SECOND_SOKO_DELI_STUFF.deli_stuff_id = M_DELI_STUFF.id
WHERE
M_SECOND_COMMON.id = @id AND M_DELI_STUFF.id != 7
OPEN item
FETCH NEXT FROM item INTO
@name, @cntWHILE @@FETCH_STATUS = 0
BEGIN
IF @ret = ''
SET @ret = @name + '-' + cast(@cnt as varchar) + '個'
ELSE
SET @ret = @ret + ' / ' + @name + '-' + cast(@cnt as varchar) + '個'
FETCH NEXT FROM item INTO
@name, @cnt
END
CLOSE item
DEALLOCATE itemRETURN @ret
END