【问题标题】:Remove unwanted columns Pivot in SQL Server删除 SQL Server 中不需要的列 Pivot
【发布时间】:2013-12-13 17:22:43
【问题描述】:

我的桌子是这样的:

CEID  BUID   WEIGHT TREND SCORE Quarter
---------------------------------------
CE001 BU001    4     5     20     1
CE001 BU001    4     0     22     2
CE001 BU001    4     0     23     3
CE001 BU001    4     0     24     4

我想要的结果是这样的

CEID  BUID   WEIGHT TREND Q1 Q2 Q3 Q4
---------------------------------------
CE001 BU001    4      NA  20 22 23 24

我编写了以下 Pivot 查询:

select * 
from table
pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter

但由于趋势也在发生变化,我在透视查询中也得到了多行......对于不同的趋势值......

我怎样才能达到上面显示的结果?即:从查询中完全删除趋势列。

【问题讨论】:

    标签: sql sql-server database relational-database


    【解决方案1】:

    停止对主表使用 SELECT *,并省略 TREND 列:

    ;WITH t AS
    (
      select CEID, BUID, WEIGHT, SCORE, Quarter from dbo.table
    )
    SELECT * FROM t
    pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter;
    

    如果你想要TREND = NA,如“我想要的结果”中所示,只需对其进行硬编码:

    ;WITH t AS
    (
      select CEID, BUID, WEIGHT, TREND = 'NA', SCORE, Quarter from dbo.table
    )
    SELECT * FROM t
    pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter;
    

    【讨论】:

    • 谢谢.. 所以需要一个临时表。
    • @eyean 不,这里没有临时表。这是一个公用表表达式 (CTE)。您也可以使用子查询/派生表来做到这一点。
    • 好的..但不是 CTE 一种临时存储,一旦使用结束就会关闭....我得到了查询的想法......我也想将查询结果插入表中,因此 CTE 语法会产生问题,因此我创建了一个临时表并在该表上使用了数据透视表......无论如何我明白了你分享的想法。
    • 如果您想将 CTE 的结果插入到另一个表中,只需执行 ;WITH t AS (some query) INSERT dbo.table(cols) SELECT cols FROM t;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多