任何人都可以为下面提供所需的查询吗? [英] Could any one give required query for bellow?

查看:74
本文介绍了任何人都可以为下面提供所需的查询吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

logTable

=================

批次日期执行期限

--------------------------------

B1 1 / JAN / 2017 80 sec

B2 1 / JAN / 2017 40秒

B1 2 / JAN / 2017 20秒

B2 2 / JAN / 2017 50秒









o / p:



BATCH 1 / JAN 2 / JAN .......

B1 80 20

B2 40 50



我尝试了什么:



我想要输出如上所述。可以给出一个查询吗?

logTable
=================
BATCH DATE EXEC-DURATION
--------------------------------
B1 1/JAN/2017 80 Sec
B2 1/JAN/2017 40 Sec
B1 2/JAN/2017 20 Sec
B2 2/JAN/2017 50 Sec
.
.
.

o/p:

BATCH 1/JAN 2/JAN .......
B1 80 20
B2 40 50

What I have tried:

Hi i want output like above. can one give query for this?

推荐答案

不是真的,没有。

问题是你要返回的列数会改变:有时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);


这篇关于任何人都可以为下面提供所需的查询吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆