Search code examples
sqlsql-servert-sqlcommon-table-expressionpartition-by

SQL Except Operator and with CTE to select all the items in 1st query but not in 2nd Query


I am trying to get all the data in the 1st query below but except the data from the 2nd query below.

Here 1st I am trying to select the unique data/distinct data by using with cte and partition by.

I tried using except, but I get this error:

Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.***

First query:

    With cte as
    (
        select 
            *, 
            row_number() over (partition by [Employee ID] order by [QTR] DESC, Wk desc) rownumber 
        from 
            tbl_HC
    )
    select * 
    from cte 
    where rownumber = 1
      and QTR = (Select max(QTR) from tbl_HC)

    Except

    --2nd query
    With cte as
    (
         select 
             *, 
             row_number() over (partition by [Employee ID] order by [QTR] DESC, Wk desc) rownumber 
         from  
             tbl_HC
    )
    select * 
    from cte 
    where rownumber = 1
        and Wk= (
        Select max(Wk) from tbl_HC
        where QTR = (Select max(QTR) from tbl_HC))`

Solution

  • your query would be like below

    With cte as
        (select *, row_number() 
        over(partition by [Employee ID] order by [QTR] DESC,Wk DESC) rownumber 
        from tbl_HC
        ), cte1 as 
        (
         select *, row_number() 
        over(partition by [Employee ID] order by [QTR] DESC,Wk DESC) rownumber 
        from tbl_HC
        )
        select * from cte 
        where rownumber =1
        and QTR= (Select max(QTR) from tbl_SDS_Headcount_Manageby)
        except
    
        select * from cte1
        where rownumber =1
        and Wk= (
        Select max(Wk) from tbl_HC
        where QTR = (Select max(QTR) from tbl_HC))