我试图在名为“代码”的列中的表中获取最大项目数。
我的表中有这样的数据:
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
请注意,代码列有时会有多个项目,以空格分隔。在这种情况下,第二个代码进入 Code2 列,如果有第三个代码,它将进入 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 列准确计算项目?或者有没有办法将所有这些代码放在一个列中并以这种方式计算?我不知道该怎么做。