2010-08-18 20 views
1
SELECT patron_name, producer.fed_number, tax_number, average_tb_test 
    FROM producer 
INNER JOIN producer_details ON producer.federal_number = producer_details.federal_number 
INNER JOIN statement ON producer.patron_number = statement.patron_number 
WHERE producer.patron_number = @PatronNo 
(SELECT MAX(statement.statement_number), MAX(period_ending) FROM statement) 
+1

你應該指定你想要的輸出。 – sgriffinusa 2010-08-18 01:58:50

回答

2

用途:

SELECT patron_name, 
     producer.fed_number, 
     tax_number, 
     average_tb_test, 
     (SELECT MAX(s.statement_number) FROM STATEMENT s), 
     (SELECT MAX(s.period_ending) FROM STATEMENT s), 
    FROM PRODUCER 
    JOIN producer_details ON producer.federal_number = producer_details.federal_number 
    JOIN statement ON producer.patron_number = statement.patron_number 
    WHERE producer.patron_number = @PatronNo 

但你會得到的每一行相同的最大STATEMENT.statement_numberSTATEMENT.period_ending值。這會給你每patron_number值最大:

SELECT patron_name, 
     producer.fed_number, 
     tax_number, 
     average_tb_test, 
     x.max_statement_num, 
     x.max_period 
    FROM PRODUCER 
    JOIN producer_details ON producer.federal_number = producer_details.federal_number 
    JOIN STATEMENT ON producer.patron_number = statement.patron_number 
    JOIN (SELECT s.patron_number, 
       MAX(s.statement_number) AS max_statement_num, 
       MAX(s.period_ending) AS max_period 
      FROM STATEMENT s 
     GROUP BY s.patron_number) x ON x.patron_number = producer.patron_number 
    WHERE producer.patron_number = @PatronNo 
+0

謝謝。有用。我只想返回一行,所以,希望這會很好。 – brookmarker 2010-08-18 02:15:07

-1

T-SQL UNION運算符將兩個或多個查詢組合到一個結果集中。

+0

-1:UNION只在列和它們的數據類型在兩個查詢中完全匹配時才起作用。 – 2010-08-18 02:08:48

+0

UNION的查詢必須匹配列數據類型 - 如果它們不匹配,則需要在適當的位置使用NULL進行空間分隔。合理,但不是OP的標準的理想解決方案。 – 2010-08-18 02:09:32

0

我建議的方法中的任何一個:

SELECT patron_name, 
     producer.fed_number, 
     tax_number, 
     average_tb_test, 
     MAX(statement.statement_number) as MaxStatementNumber, 
     MAX(statement.period_ending) as MaxPeriodEnding 
    FROM PRODUCER 
    JOIN producer_details ON producer.federal_number = producer_details.federal_number 
    JOIN statement ON producer.patron_number = statement.patron_number 
    WHERE producer.patron_number = @PatronNo 
    GROUP BY patron_name, 
     producer.fed_number, 
     tax_number, 
     average_tb_test 

DECLARE @MaxStatementNumber INT, @MaxPeriodEnding INT 
SELECT @MaxStatementNumber = MAX(statement.statement_number), @MaxPeriodEnding = MAX(period_ending) FROM statement 

SELECT patron_name, producer.fed_number, tax_number, average_tb_test, @MaxStatementNumber AS maxStatementNumber, @MaxPeriodEnding AS MaxPeriodEnding 
    FROM producer 
INNER JOIN producer_details ON producer.federal_number = producer_details.federal_number 
INNER JOIN statement ON producer.patron_number = statement.patron_number 
WHERE producer.patron_number = @PatronNo 

這真的取決於你的結果尋找。如果您想爲每個patron_name等組使用MaxStatemetnNumber和MaxEndingPeriod,請使用第一個,否則使用第二個。

相關問題