SQL - 对于查询中的每个循环

时间:2017-04-26 13:00:47

标签: sql-server tsql reporting-services

我不确定我的问题的最佳标题是什么,但我会在下面解释我的问题/问题:

我使用以下查询,我在其中过滤工作订单,然后收集它的所有历史记录,我需要在报告中显示:

select a.name, d.data, h.started, e.name, * from wshhistory h
join asset a
on a.uid = h.assetid 
join wshfld d
on h.uid = d.wshhistid
join fielddefinition f
on d.flddefid = f.uid
join enumlookup e
on h.assetstatus = e.uid
where h.shdid = '43FEB092-D3B1-4008-9C44-A3A249987849' order by a.name, h.started asc

我的结果很好,但是......

enter image description here

我需要的是每个(唯一)资产只有1行(最后一个/最上面一个),其他所有行都作为列,因此每个资产只有1行。 所以我的报告看起来像:

enter image description here

在vb.net中,我会用每个循环来解决所有资产,但是使用SQL我的知识是有限的,我不知道如何在查询中解决这个问题。

有什么想法吗?

提前感谢!

2 个答案:

答案 0 :(得分:2)

要生成您所声明的输出,您可以使用条件聚合。这样的事情。

select a.name
    , min(case when d.data = 'Pre Use' then d.data end) as PreUse
    , min(case when d.data = 'Connected' then d.data end) as Connected
    , min(case when d.data = 'Let Go' then d.data end) as LetGo
    , min(case when d.data = 'Disconnected' then d.data end) as Disconnected
from wshhistory h
join asset a on a.uid = h.assetid 
join wshfld d on h.uid = d.wshhistid
join fielddefinition f on d.flddefid = f.uid
join enumlookup e on h.assetstatus = e.uid
where h.shdid = '43FEB092-D3B1-4008-9C44-A3A249987849' 
group by a.name
order by a.name

答案 1 :(得分:0)

尝试一个支点:

StreamWriter.WriteLine

由于你还没有为我们创建一些数据,我无法测试它,但它应该可以工作:)