2016-01-27 74 views
0

我正在連接2​​個表並顯示InvNumber,InvAmount和JobNumber的數據。我只需要在第一行顯示InvNumber和InvAmount。發票有多個應顯示的工作號。僅顯示SQL中的第一行

這裏是DDL

DECLARE @Date datetime; 
SET @Date = GETDATE(); 

DECLARE @TEST_DATA TABLE 
(
    DT_ID INT  IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED 
    ,InvNumber  VARCHAR(10) NOT NULL 
    ,InvAmount  VARCHAR(10) NOT NULL 
    ,JobNumber  VARCHAR(10) NOT NULL 
); 

INSERT INTO @TEST_DATA (InvNumber, InvAmount,JobNumber) 
VALUES 
    ('70001', '12056','J65448') 
,('70001', '12056','J12566') 
,('70001', '12056','J35222') 
,('70001', '12056','J45222') 
,('70001', '12056','456855') 
,('70001', '12056','J55254') 

; 

SELECT 
    J.DT_ID 
    ,InvNumber 
    ,InvAmount 
    ,JobNumber 

FROM @TEST_DATA AS J 
+0

顯示實際的加入和你想要的結果是 – Paparazzi

+0

請提供者預期的輸出結構。 – Sahi

回答

5

你可以用ROW_NUMBER和CASE表達式來做這樣的事情。

SELECT DT_ID, 
     CASE WHEN RN = 1 THEN InvNumber 
       ELSE '' 
     END InvNumber, 
     CASE WHEN RN = 1 THEN InvAmount 
       ELSE '' 
     END InvAmount, 
     JobNumber 
FROM (SELECT DT_ID, 
       InvNumber, 
       InvAmount, 
       JobNumber, 
       ROW_NUMBER() OVER (PARTITION BY InvNumber,InvAmount ORDER BY DT_ID) RN 
      FROM @TEST_DATA 
     ) j 
+0

@Frisbee他們顯示 – JamieD77

+0

好吧我讀錯了 – Paparazzi

+0

@Frisbee'我只需要顯示InvNumber和InvAmount在**第一行**'..這讓我假設他想爲每個工作號碼多行,但不想繼續看到InvNumber和InvAmount ..我可能是錯的 – JamieD77

1

你真的不能輕鬆做到這一點與SQL。

儘管您可以使用SELECT語句中的GROUP BY子句按發票對作業編號進行分組。

+0

這對於SQL來說是可行的,可以獲得「行號」,並且有幾種不同的方法僅在第一行顯示列數據。 – Gilgamesh

1

我幾乎符合JamieD77的答案。但我不確定這個解決方案是否會顯示所有的InvNumber和所有的InvAmount。所以,這是我的建議:

select td.DT_ID, 
     case when td.DT_ID = j.DT_ID then td.InvNumber 
      else '' 
     end as InvNumber, 
     case when td.DT_ID = j.DT_ID then td.InvAmount 
      else '' 
     end as InvAmount, 
     td.JobNumber 
from @TEST_DATA as td 
left join (
      select InvNumber, 
        InvAmount, 
        min(DT_ID) as DT_ID 
      from  @TEST_DATA 
      group by InvNumber, 
        InvAmount 
     ) j