2014-02-21 68 views
2

您好,我想选择与每个拍卖ID相关联的每个拍卖ID,其中status ='won',并且每个拍卖ID的状态是'过期',作为两个分隔列我的发言能够有人帮助请,第一列将被调用赢了,第二个过期从2表中选择2个不同的值

SELECT 
     Auction.AuctionID, 
     DATENAME(mm, BID.Date) AS Month 
FROM 
     BID INNER JOIN Auction ON BID.AuctionID = Auction.AuctionID 
WHERE   
     BID.Status = 'Won' 
ORDER BY Month 

期望的结果:

AuctionID Month       Won Expired 
----------- ------------------------------ ---- ------- 
1   January       32 22 
2   March       10 22 
3   April       0  2 
+2

你想要在这些列中显示哪些数据? – Szymon

+1

一次拍卖会赢得和过期吗? –

+0

没有任何拍卖可以赢得或过期不是两个 – user3287068

回答

0

如果你想要的结果是这样的:

AuctionID Month       Won Expired 
----------- ------------------------------ ---- ------- 
1   January      Won NULL 
2   January      Won NULL 
3   January      NULL Expired 

然后,你可以使用此查询:

SELECT   
    A.AuctionID, 
    DATENAME(mm, B.Date) AS Month, 
    CASE Status WHEN 'Won' THEN 'Won' ELSE NULL END AS Won, 
    CASE Status WHEN 'Expired' THEN 'Expired' ELSE NULL END AS Expired 
FROM BID b 
INNER JOIN Auction a ON B.AuctionID = A.AuctionID 
ORDER BY Month, AuctionID 

但如果你想要的结果是这样的:

AuctionID Month       Status 
----------- ------------------------------ -------------------- 
1   January      Won 
2   February      Won 
3   January      Expired 

然后这个查询会做:

SELECT   
    A.AuctionID, 
    DATENAME(mm, B.Date) AS Month, 
    Status 
FROM BID b 
INNER JOIN Auction a ON B.AuctionID = A.AuctionID 
ORDER BY Status Desc, Month DESC, AuctionID 

第三次尝试。要得到这样的:

Month       Won   Expired 
------------------------------ ----------- ----------- 
January      1   1 
February      1   0 

使用此查询:

SELECT 
    DATENAME(mm, B.Date) AS Month, 
    SUM(CASE WHEN Status = 'Won' THEN 1 ELSE 0 END) AS Won, 
    SUM(CASE WHEN Status = 'Expired' THEN 1 ELSE 0 END) AS Expired 
FROM BID b 
INNER JOIN Auction a ON B.AuctionID = A.AuctionID 
GROUP BY DATENAME(mm, B.Date), B.Date 
ORDER BY b.Date 
+0

这些例子似乎在好的方式,所以让我解释一下我在做什么,我正在做一个计数拍卖Bidding.Status ='won'和另一个计数在哪里拍卖.Status ='已过期',我要在图中显示此结果 – user3287068

+0

@ user3287068我添加了另一个版本。我想这可能是你以后的事情。 – jpw

+0

现在感谢它的工作 – user3287068

0

拍卖就不可能取得胜利,并在同一时间,让你不到期吨需要有例如:AuctionId 1:韩元:120214,过期050214?

那么让我们来想象这是可能的:

with p as (
    SELECT Auction.AuctionID, DATENAME(mm, BID.Date) AS Month 
    FROM BID 
    INNER JOIN Auction ON BID.AuctionID = Auction.AuctionID) 

select AuctionId, max(Won), Max(Expired) 
from 
(
    select AuctionId, Month as Won, null as Expired from p 
    WHERE (BID.Status = 'Won') 
    union 
    select AuctionId, null, Month from p 
    WHERE (BID.Status = 'Expired') 
) z 
ORDER BY Won, Expired 
+0

我想要显示的是具有关联BidID的所有拍卖ID,其状态='wON'AS WON,最后是所有拍卖。id这是他自己的状态='已过期' – user3287068

-1

试试这个..

SELECT 
    Auction.AuctionID, 
    DATENAME(mm, BID.Date) AS Month, 
    CASE status 
    WHEN Won THEN Status As Won 
    WHEN Expired THEN Status As Expired 
    END 
FROM 
    BID INNER JOIN Auction ON BID.AuctionID = Auction.AuctionID 
ORDER BY Month 
+1

我不是down down的选民,但是在目前的格式下,这是不合法的TSQL。 –

+1

@大卫没关系,如果我写了一些错误的东西,那么我应该被投票。 –

4

你可以尝试这样的事情,它不是确切只是一个概述

*** 

    SELECT 
      Auction.AuctionID, 
      DATENAME(mm, b1.Date) AS Month, 
      COUNT(*) AS `Won`, 
      (SELECT count(*) from BID b2 WHERE DATENAME(mm, b1.Date) = DATENAME(mm, b2.Date))-COUNT(*) AS `EXPIRED` 
    FROM 
      BID b1 
      INNER JOIN Auction ON BID.AuctionID = Auction.AuctionID  
    WHERE   
      BID.Status = 'Won' 
    GROUP BY Month 

***