0

「コード」という列内のテーブル内のアイテムの最大数を取得しようとしています。

テーブルには次のようなデータがあります。

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 つの列に入れ、そのようにカウントする方法はありますか? これについてどうすればよいかわかりません。

4

1 に答える 1