仅显示SQL中的第一行

Lea*_*cro 0 sql t-sql sql-server

我正在加入2个表并显示InvNumber,InvAmount和JobNumber的数据.我只需要在第一行显示InvNumber和InvAmount.发票有多个应显示的作业编号.

HEre是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
Run Code Online (Sandbox Code Playgroud)

Jam*_*D77 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)