分组依据和非分离列和数据规范化

时间:2010-01-19 12:30:36

标签: sql group-by normalization distinct

我在MS SQL 2005中有一个从Access数据库导入的大型表(60列,150万条记录)非规范化数据。我的任务是规范化并将这些数据插入到我们的数据模型中。

我想创建一个使用分组的查询,例如“customer_number”,并返回一个结果集,该结果集只包含每个customer_number不相同的列。我不知道它是否可能,但如果是的话会有很大的帮助。

编辑:如果我的表有3列(cust_num,cust_name_cust_address)和5条记录

|cust_num|cust_name|cust_address
|01      |abc      |12 1st street
|02      |cbs      |1 Aroundthe Way
|01      |abc      |MLK BLVD
|03      |DMC      |Hollis Queens
|02      |cbs      |1 Aroundthe Way

来自我所需查询的结果应该只是来自cust_num和cust_name的数据,因为cust_address对于该cust_num分组具有不同的值。 cust_num有许多地址,但只有一个cust_name。

有人能指出我正确的方向吗?

吉姆

2 个答案:

答案 0 :(得分:2)

WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, … ORDER BY id) AS rn
        FROM    mytable
        )
SELECT  *
FROM    q
WHERE   rn = 2

这将仅选择PARTITION BY子句中列出的所有列上具有重复项的行(事实上,如果有的话,它将选择第一个副本)。

答案 1 :(得分:0)

不,这不可能完成