我不确定我的问题的最佳标题是什么,但我会在下面解释我的问题/问题:
我使用以下查询,我在其中过滤工作订单,然后收集它的所有历史记录,我需要在报告中显示:
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
我的结果很好,但是......
我需要的是每个(唯一)资产只有1行(最后一个/最上面一个),其他所有行都作为列,因此每个资产只有1行。 所以我的报告看起来像:
在vb.net中,我会用每个循环来解决所有资产,但是使用SQL我的知识是有限的,我不知道如何在查询中解决这个问题。
有什么想法吗?
提前感谢!
答案 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
由于你还没有为我们创建一些数据,我无法测试它,但它应该可以工作:)