SQL不同的一列,查询多个

时间:2014-07-16 22:34:52

标签: sql sql-server

我知道我似乎在这里击败了一匹死马,但是我已经搞了一个小时,尝试了所有我能找到的例子,似乎没有什么可以为我做的。下面是我要追求的非常愚蠢的版本。在我的现实世界解决方案中,我查询了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

2 个答案:

答案 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的租车票的发票号。

如果您不想使用Group By,则these answers会有其他选择。