2014-02-21 115 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 

***