もう一つの方法は、スカラー関数でありますこれを行うために。
あなたの質問のスキーマ。
CREATE TABLE #Event (EVENT_LIST VARCHAR(MAX))
INSERT INTO #Event
SELECT 'Payment stopped, Claim, Claim, Claim'
UNION ALL
SELECT 'Claim'
UNION ALL
SELECT 'Claim, Claim, Claim'
UNION ALL
SELECT 'Claim, Claim, Payment stopped, Case Closed'
各レコードの各単語の数をカウントする必要があります。したがって、一度に行ごとに実行して結果を返す関数を作成する必要があります。ロジックと
機能:
CREATE FUNCTION [dbo].FN_REPEAT_COUNT(@VAR VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
SET @[email protected]+','
;WITH CTE AS --Recursive CTE for calculating ',' indexes
(
SELECT 1 INDX_FRM
, LEN(@VAR) LEN_VAR
, CHARINDEX(',',@VAR)+1 AS INDX_TO
UNION ALL
SELECT CAST(INDX_TO+1 AS INT)
, LEN_VAR
, CHARINDEX(',',SUBSTRING(@VAR,INDX_TO+1,LEN_VAR))+INDX_TO+1
FROM CTE WHERE INDX_TO<LEN_VAR
)
,CTE2 AS( --cte to generate records based on ',' index
SELECT SUBSTRING(@VAR,INDX_FRM,INDX_TO-INDX_FRM-1) AS LIST FROM CTE
)
,CTE3 AS ( --cte for count of word Claim and making them back to column
SELECT (
SELECT CAST(COUNT(CASE
WHEN LIST = 'Claim'
THEN 1
ELSE NULL
END) AS VARCHAR(2)) + ' ' + LIST + ','
FROM CTE2
GROUP BY LIST
FOR XML PATH('')
) COUNTED
)
--Removing 0 and replacing ',' with Empty String
SELECT @VAR = REPLACE(SUBSTRING(COUNTED,1,LEN(COUNTED)-1),'0','') FROM CTE3
RETURN @VAR
END
そして今はちょうど下の
SELECT *, dbo.FN_REPEAT_COUNT(EVENT_LIST) AS FN_RES FROM #Event
のようなあなたの列にスカラー関数を呼び出し、出力はこれはのように思える
╔════════════════════════════════════════════╦═══════════════════════════════════════╗
║ EVENT_LIST ║ FN_RES ║
╠════════════════════════════════════════════╬═══════════════════════════════════════╣
║ Payment stopped, Claim, Claim, Claim ║ 3 Claim, Payment stopped ║
║ Claim ║ 1 Claim ║
║ Claim, Claim, Claim ║ 3 Claim ║
║ Claim, Claim, Payment stopped, Case Closed ║ Case Closed,2 Claim, Payment stopped ║
╚════════════════════════════════════════════╩═══════════════════════════════════════╝
ですフロントエンドのための仕事ではなく、私にはdb。csvを分割して、それを再フォーマットし、そしてsそれを一緒につなぎ合わせることは、SQLを使ったPITAになるでしょう。 – Jamiec
これはSSRSレポートです。あなたは、レポートデザイナーで利用可能なオプションで可能であると思いますか? – Saranya
可能かもしれませんが、可能なことはテーブルを適切に設計することです。問題はありません。コンマ区切りの値を含む列は、操作する必要がありますが、レポートを戻す方法ではありません。イベント・テーブルとジャンクション・テーブルをレコードに戻す必要があります。 – Jamiec