2014-02-21 7 views
2

Здравствуйте, я хочу выбрать, каждый идентификатор аукциона, связанный с идентификатором bid со статусом = 'won', а также каждый идентификатор аукциона, статус которого «Истек», как два разделенных столбца в мое заявление может кто-то помочь, пожалуйста, первый столбец будет вызова выиграл и второй один истекВыберите 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 = 'Expired', я собираюсь отобразить этот результат в графике – user3287068

+0

@ user3287068 Я добавил еще одну версию. Я думаю, что это может быть то, за чем вам нужно. – jpw

+0

Спасибо, что работа сейчас – user3287068

0

аукцион не может быть выиграна и истекли в то же время, так что вы не» t нужно иметь, например: AuctionId 1: won: 120214, expired 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, где он status = 'wON' AS WON и, наконец, все аукционы.id, который его собственный статус = 'expired' – 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

Я не проголосовавший, но в его нынешнем формате это недействительно 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 

*** 
Смежные вопросы