Sql server 如何在SQL Server中跨3列或4列选择不同的值组合

Sql server 如何在SQL Server中跨3列或4列选择不同的值组合,sql-server,group-by,distinct,denormalization,Sql Server,Group By,Distinct,Denormalization,我在SQLServer中继承了一个非规范化的表,有15列购买记录 |指数| TransNo |基金|成本|城市|邮政|银行|风险| YesNo | |1 | 1 |绿色| 34 |纽约|拉链|尚特| |2 | 12 |党| 345.23 |纽约| Zip | BOA | BS| |3 | 32 | Edu | 43 |波士顿| Zip | BOA | BS| |4 | 53 |图书| 56 | Atl | Zip |花旗| |5 | 422 | Groc | 12315 | Atl | Zip

我在SQLServer中继承了一个非规范化的表,有15列购买记录

|指数| TransNo |基金|成本|城市|邮政|银行|风险| YesNo |

|1 | 1 |绿色| 34 |纽约|拉链|尚特|

|2 | 12 |党| 345.23 |纽约| Zip | BOA | BS|

|3 | 32 | Edu | 43 |波士顿| Zip | BOA | BS|

|4 | 53 |图书| 56 | Atl | Zip |花旗|

|5 | 422 | Groc | 12315 | Atl | Zip |粉色|

  • 我只需要提取3个不同的列组合,忽略其他列,如index和trans No,然后将它们插入 相同的表(其余列为空

  • 在计划下一阶段时,我希望2正常化-我还需要 将每个不同的值插入其自己的表中

  • |基金|城市|银行|

    |绿色|纽约|尚|//绿色与城市和银行的所有不同组合

    |绿色|纽约|博阿| BS |

    |Edu | NYC | Sunt |//Edu与城市和银行的所有不同组合

    |纽约教育学院


    使用
    insert-in..从
    distinct
    构造中选择,以仅获取如下所示的不同记录

    insert into mytable
    select distinct Fund, City, Bank, null,null,null,....,null
    from mytable
    
    编辑:

    根据你下面的评论

    1) 如何填写列Risk_YesNo=Y的默认值

    只需将其包含在
    SELECT
    查询中[参见下面的示例]

    2) 如何填写一个随机成本值,例如一列[成本]

    您也可以在查询的
    SELECT
    部分中包含这一点。如果您使用的是SQL Server 2008及更高版本,则可以使用函数来实现相同的功能

    RAND()
    函数返回一个
    float
    类型结果。因此,如果您的
    Cost
    列的类型为
    Integer
    ,则必须将其显式转换为
    cast(RAND()as int)
    [参见下面的示例]

    这样,您的查询将成为

    insert into mytable(Fund, City, Bank, Risk_YesNo, Cost, ....)
    select distinct Fund, City, Bank, 'Y', RAND(), null,null,null,....,null
    from mytable
    

    1) 如何填写列风险的默认值\u YesNo=Y 2)如何填写列的随机成本值,例如,对于列[cost]@aggie,请参见答案中的编辑。以后,一定要一次把所有的问题都清楚简洁地贴出来。