【发布时间】:2017-01-22 03:16:04
【问题描述】:
我会尽量清楚地描述我的问题。
我有一个包含 1000 个唯一客户的数据集,例如 ##temp1。
我有另一个数据集,其中包含过去 7 年中来自 ##temp1 的 1000 个客户的相关信息。让我们将此数据集称为##temp2。我感兴趣的第二个数据集(##temp2)中有 6 个特定列,我们将它们称为 A、B、C、D、E、F 列。仅供参考,A、C、E 列包含的信息是浮点数据类型(2012、2013、2014..)中某种形式的年份,B、D、F 列保存的信息是浮点数据类型中某种形式的评级(1,2,3,..upto 5) . year 和 rating 列都有 NULL 值,我现在已将其转换为 0。
我的最终目标是创建一个报告,其中包含 ##temp1 中 1000 个客户的信息,这样每一行都应包含以下形式的信息,
ClientID | ClientName | ColA_Latest_Year1 | ColB_Corresponding_Rating_Year_1 | ColC_Latest_Year2 | ColD_Corresponding_Rating_Year_2 | ColE_Latest_Year3 | ColF_Corresponding_Rating_Year3.
ColA_Latest_Year1 应保存数据集 ##temp2 中该特定客户的最新年份,ColB_Corresponding_Rating_Year_1 应保存与从 A 列中提取的年份相对应的 B 列评级。其他列也是如此。
到目前为止,我采取的方法是,
- 根据需要创建
##temp1 - 根据需要创建
##temp2 -
##temp1 LEFT JOIN ##temp2在客户端 ID 上检索##temp1中所有客户端的年份和评级信息,并将所有这些信息放入##temp3。##temp3中的每个客户都会有多行,因为##temp3中的数据是多年的。 - 按client_ids对年份列(B,D,F)分区进行排序,放入
##temp4,
我现在的东西是这样的,
Rnk_A | Rnk_C | Rnk_F | ColA | ColB | ColC | ColD | ColE | ColF | Client_id | Client_name
2 | 1 | 1 | 0 | 0 | 0 | 0 | 2014 | 1 | 111 | 'ABC'
1 | 2 | 1 | 2012 | 1 | 0 | 0 | 0 | 0 | 111 | 'ABC'
我的目标是
Rnk_A | Rnk_C | Rnk_F | ColA | ColB | ColC | ColD | ColE | ColF | Client_id | Client_name
1 | 1 | 1 | 2012| 1 | 0 | 0 | 2014| 1 | 111 | 'ABC'
感谢任何帮助。
【问题讨论】:
-
"year 和 rating 列都有 NULL 值,我现在已将其转换为 0" 不要那样做!
NULL和0根本不同。如果您任意将一个映射到另一个,您将丢失信息,因为您无法再区分这两个 不同 案例。 (请注意,这是一般性建议,您可能会在您的特定情况下侥幸逃脱 - 但是您很幸运。不要养成坏习惯,因为真的:你没有'不需要这样做 只要你只是简单地正确处理 NULL。) -
您的 A、C、E 列是否有任何重复的每个客户。对于您的解决方案,这是一个非常重要的考虑因素。 (并且 PS:一般来说,您应该显示您尝试过的查询不太有效。)
标签: sql sql-server-2008