【问题标题】:SQL Except Operator and with CTE to select all the items in 1st query but not in 2nd QuerySQL except 运算符和 CTE 选择第一个查询中的所有项目,而不是第二个查询中的所有项目
【发布时间】:2019-08-06 07:04:30
【问题描述】:

我正在尝试获取下面第一个查询中的所有数据,但下面第二个查询中的数据除外。

在这里,我第一次尝试使用with ctepartition by 选择唯一数据/不同数据。

我尝试使用 except,但出现此错误:

关键字“with”附近的语法不正确。如果该语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。***

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))`

【问题讨论】:

标签: sql sql-server tsql common-table-expression partition-by


【解决方案1】:

您的查询如下所示

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))

【讨论】:

  • 完美!感谢您的解决方案
猜你喜欢
  • 2015-11-16
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 2017-07-28
相关资源
最近更新 更多