且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

任何人都可以为下面提供所需的查询吗?

更新时间:2023-11-20 11:47:16

不是真的,没有。

问题是你要返回的列数会改变:有时29,有时30,31或32,取决于月份和年份。 PIVOT(你想要使用它)只适用于固定列数(因为你必须明确指定要使用的列)。



我强烈建议您在演示代码中处理此问题,而不是SQL。
Not really, no.
The problem is that the number of columns you would return changes: sometimes 29, sometimes 30, 31, or 32 depending on the month and year. And PIVOT (which is what you want to use) only works with fixed column counts (because you have to explicitly specify the columns to use).

I'd strongly suggest that you work on this in your presentation code, not SQL.


您可以动态生成列。以下是代码



You can dynamically generate columns.following is code

Create table logtable
(

batch  varchar(5),
date1  DateTime,
Duration  integer)

Insert into logtable values('B1','01-jAN-2017',80),
('B2','01-jAN-2017',40),
('B1','02-jAN-2017',20),
('B2','02-jAN-2017',50)


DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(DATE1) 
                    from logtable 
                    group by date1 
                    order by DATE1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT BATCH,' + @cols + ' from 
             (
                select BATCH, DATE1, DURATION
                from LOGTABLE
            ) x
            pivot 
            (
                sum(DURATION)
                for DATE1 in (' + @cols + ')
            ) p '

execute(@query);