我知道我似乎在这里击败了一匹死马,但是我已经搞了一个小时,尝试了所有我能找到的例子,似乎没有什么可以为我做的。下面是我要追求的非常愚蠢的版本。在我的现实世界解决方案中,我查询了14列,有2个连接,只有3个条件。
select distinct
d.rental_ticket,
i.Invoice_Number
from HP_View_DEL_Ticket_Header_Master as d
join CSView_INVC_Header_Master as i
on d.Rental_Ticket = i.Rental_Ticket_or_Tag_Number
where d.Ticket_Month <= '6'
and d.Ticket_Year = 2014
order by Rental_Ticket
我得到这样的东西
Rental Invoice
3023 3127
3146 3074
3215 3103
3235 3167
3245 3054 -- dup
3245 3055 -- dup
3249 3081
3251 3214
3255 3102
3261 3099
3267 3098
3276 3056
我知道,因为我使用不同的多列,它将过滤到所有组合。很多,我只需要看一次租赁号码,无论它有多少发票。
在我的实时查询中,我使用的是查找代码的条件,CRT,我只想查看一行数据(依次是租借号码),无论是否只有一个或10个CRT代码本
我根据另一个人的例子把它扔在那里,但它似乎什么都不做
where d.Rental_Ticket in (select max(Rental_Ticket) as rental_ticket from HP_View_DEL_Ticket_Header_Master as d group by d.Rental_Ticket)
任何帮助将不胜感激!!
更新:
select d.rental_ticket, max(i.invoice_number) as Invoice_Number,
d.Reference_Location1 as Rig, max(d.Rental_Ticket)
from HP_View_DEL_Ticket_Header_Master as d
join CSView_INVC_Header_Master as i
on d.Rental_Ticket = i.Rental_Ticket_or_Tag_Number
where d.Ticket_Month <= '6'
and d.Ticket_Year = 2014
group by d.Rental_Ticket, d.Reference_Location1
order by Rental_Ticket
这给了我4列,真的我只需要2(Rental_Ticket和Rig) 谢谢BD
答案 0 :(得分:0)
将distinct
替换为group by
,这将为您提供一系列选项:
select d.rental_ticket,
MIN(i.Invoice_Number) as Invoice_Number
from HP_View_DEL_Ticket_Header_Master as d
join CSView_INVC_Header_Master as i
on d.Rental_Ticket = i.Rental_Ticket_or_Tag_Number
where d.Ticket_Month <= '6'
and d.Ticket_Year = 2014
group by d.rental_ticket
order by Rental_Ticket
答案 1 :(得分:0)
我会这样做:
select d.rental_ticket, MAX(i.Invoice_Number)
from HP_View_DEL_Ticket_Header_Master as d
join CSView_INVC_Header_Master as i
on d.Rental_Ticket = i.Rental_Ticket_or_Tag_Number
where d.Ticket_Month <= '6'
and d.Ticket_Year = 2014
GROUP BY d.rental_ticket
order by d.rental_ticket
基本上,您希望获取每张独特租借票的数据。问题是服务器知道您可以为每个租赁票具有多个发票号。因此,您可以通过Rental Ticket进行分组,以获得唯一的值。
对于所有其他列,您需要使用聚合函数。可以采取所有这些发票编号的实例,并为每组租赁单获得一个。
在我的例子中,我使用了MAX。这样可以获得3055作为3245的租车票的发票号。