「コード」という列内のテーブル内のアイテムの最大数を取得しようとしています。
テーブルには次のようなデータがあります。
ID Contact Date Service Code Tech Code1 Code2 Code3 Code4 Code5
1 306 5/8/2009 Individual 30751 3004 Mike 30751 3004 NULL NULL NULL
2 306 5/13/2009 Individual 30751 3004 Mike 30751 3004 NULL NULL NULL
3 308 4/17/2009 Testing 29631 Keith 29631 NULL NULL NULL NULL
4 318 4/20/2009 Individual 29633 Carol 29633 NULL NULL NULL NULL
5 318 4/27/2009 Individual 29633 Carol 29633 NULL NULL NULL NULL
6 318 4/13/2009 Individual 29633 Carol 29633 NULL NULL NULL NULL
7 318 5/4/2009 Individual 29633 Carol 29633 NULL NULL NULL NULL
8 318 5/11/2009 Individual 29633 Carol 29633 NULL NULL NULL NULL
9 320 4/27/2009 Office 5781 3004 4019 Ed 5781 3004 4019 NULL NULL
10 324 4/17/2009 Individual 3004 Julie 3004 NULL NULL NULL NULL
11 324 2/20/2009 Individual 3004 Julie 3004 NULL NULL NULL NULL
12 324 4/3/2009 Individual 3004 Julie 3004 NULL NULL NULL NULL
13 325 5/19/2009 Interview 3090 Max 3090 NULL NULL NULL NULL
Code 列には、スペースで区切られた複数の項目が含まれることがあることに注意してください。その場合、2 番目のコードは Code2 列に入り、3 番目のコードがある場合は Code3 列に入ります。
現在、このようなクエリを使用して最も一般的なコードを見つけていますが、コード列に複数の項目がある行については正確ではありません。
SELECT * FROM ( SELECT ID,
CASE
WHEN dd1.allowed = 1 AND dd1.co_allowed = 1 THEN Code1
WHEN dd2.allowed = 1 AND dd2.co_allowed = 1 THEN Code2
WHEN dd3.allowed = 1 AND dd3.co_allowed = 1 THEN Code3
END AS Code,
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Date DESC) AS RowNum
FROM MC
LEFT JOIN ReferenceTables.dbo.dim_code dd1 ON MC.Code1 = dd1.no_decimal
LEFT JOIN ReferenceTables.dbo.dim_code dd2 ON MC.Code2 = dd2.no_decimal
LEFT JOIN ReferenceTables.dbo.dim_code dd3 ON MC.Code3 = dd3.no_decimal
WHERE (dd1.allowed = 1 AND dd1.co_allowed = 1)
OR (dd2.allowed = 1 AND dd2.co_allowed = 1)
OR (dd3.allowed = 1 AND dd3.co_allowed = 1) ) x
WHERE RowNum = 1
Code1、Code2、Code3、および Code4 列を使用してアイテムを正確にカウントするにはどうすればよいですか? または、これらすべてのコードを 1 つの列に入れ、そのようにカウントする方法はありますか? これについてどうすればよいかわかりません。