首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助!无法获取所需的结果

帮助!无法获取所需的结果
EN

Stack Overflow用户
提问于 2011-05-16 16:20:42
回答 1查看 49关注 0票数 0

使用SQL Server2008(R2)

我有一个结果集,我需要以不同的方式显示,它目前可用如下所示:

代码语言:javascript
复制
Resource    Nr  Cost    StartDate   EndDate  
Cable_5m    8   3.5 12/03/2011  13/03/2011  
Cable_5m    2   3.5 13/03/2011  14/03/2011  
Rope125A    1   0   16/03/2011  18/03/2011  
Rope125A    1   0   17/03/2011  17/03/2011  

我需要的是在日期的基础上报告每个资源的发送数量,如下所示:

代码语言:javascript
复制
DateOfEvnt Resource Nr Cost  
2011-03-12 Cable_5m 8 3.50  
2011-03-13 Cable_5m 10 3.50   
2011-03-14 Cable_5m 2 3.50  
2011-03-16 Rope125A 1 0.00  
2011-03-17 Rope125A 2 0.00  
2011-03-18 Rope125A 1 0.00

我看过pivot,但终生无法让它工作,我不确定pivot是我所需要的。所有的帮助都会被感激地接受。

EN

回答 1

Stack Overflow用户

发布于 2011-05-16 16:42:33

对于给定的输入和输出,根本不需要PIVOT。一个简单的UNIONGROUP BY就足够了。

测试数据

代码语言:javascript
复制
DECLARE @Resources TABLE (
    Resource VARCHAR(32)
    , Nr INTEGER
    , Cost FLOAT
    , StartDate DATE
    , EndDate DATE
)

INSERT INTO @Resources 
    SELECT 'Cable_5m', 8, 3.5, '03/12/2011', '03/13/2011'
    UNION ALL SELECT 'Cable_5m', 2, 3.5, '03/13/2011', '03/14/2011'
    UNION ALL SELECT 'Rope125A', 1, 0,   '03/16/2011', '03/18/2011' 
    UNION ALL SELECT 'Rope125A', 1, 0,   '03/17/2011', '03/17/2011'

SQL语句

代码语言:javascript
复制
SELECT  DateOfEvnt
        , Resource
        , Nr = SUM(Nr)
        , Cost      
FROM    (           
            SELECT  Resource
                    , Nr
                    , Cost
                    , [DateOfEvnt] = StartDate
            FROM    @Resources
            UNION ALL       
            SELECT  Resource
                    , Nr
                    , Cost
                    , [DateOfEvnt] = EndDate
            FROM    @Resources
        ) r         
GROUP BY
        Resource
        , Cost
        , DateOfEvnt

编辑

虽然UNIONGROUP BY满足了结果,但我开始怀疑您更需要这样的东西,即WITH语句返回Start-EndDate之间每天的记录。

代码语言:javascript
复制
;WITH q AS (
    SELECT  Resource
            , Nr
            , Cost
            , StartDate
            , DateOfEvnt = StartDate            
    FROM    @Resources
    UNION ALL
    SELECT  q.Resource
            , q.Nr
            , q.Cost
            , q.StartDate
            , DATEADD(day, 1, q.DateOfEvnt)         
    FROM    q
            INNER JOIN @Resources s ON s.Resource = q.Resource
                                       AND s.Nr = q.Nr
                                       AND s.StartDate = q.StartDate
    WHERE   q.DateOfEvnt < s.EndDate
)
SELECT  DateOfEvnt
        , Resource
        , Nr = SUM(Nr)
        , Cost
FROM    q
GROUP BY
        DateOfEvnt
        , Resource
        , Cost
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6014721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档