【问题标题】:Select one column from a group by query in SQL Server在 SQL Server 中按查询从组中选择一列
【发布时间】:2021-04-15 20:03:56
【问题描述】:

我在 SQL Server 中有这个查询,其中包含我需要的所有条件和分组:

SELECT 
    PersonnelID, Name, EmpStartCalc,
    MAX(PositionDetailsValidFromCalc) PD , 
    MAX(PositionHierValidFromCalc) PH, 
    MAX(PWAValidFromCalc) 
    PWA, 
    MAX(RowId) AS RowId
FROM 
    TV_IAMintegration_VW 
WHERE
    EmpStartCalc >= 20200101 
    AND EmpStartCalc <= 20200131 
    AND ((20200131 > PositionHierValidFromCalc     
GROUP BY 
    PersonnelID, Name, EmpStartCalc
ORDER BY 
    PersonnelID Asc

我得到的结果还有一些其他列也很重要,但我需要单独的 Rowids 才能从其他类似的表中再次获取完整记录

SELECT *
FROM Tv_IAM_NumSequence
WHERE RowId IN ("Row Ids returned from the above query")  

【问题讨论】:

  • 我格式化了查询,但 where 子句看起来不完整。
  • 你的意思是在同一个batch/sproc中使用吗?看OUTPUT子句

标签: sql sql-server group-by subquery


【解决方案1】:

一个简单的方法是使用 CTE:

with cte as (
      <first query here without order by>
     )
select ns.*
from Tv_IAM_NumSequence ns
where ns.rowid in (select rowid from cte);

【讨论】:

  • 非常感谢您的帮助!很好的方法和最小化的代码
【解决方案2】:
-- Possibility 1
SELECT *
FROM Tv_IAM_NumSequence f1
inner join 
(
SELECT 
    PersonnelID, Name, EmpStartCalc,
    MAX(PositionDetailsValidFromCalc) PD , 
    MAX(PositionHierValidFromCalc) PH, 
    MAX(PWAValidFromCalc) PWA, 
    MAX(RowId) AS RowId
FROM TV_IAMintegration_VW 
WHERE
    EmpStartCalc between 20200101 AND 20200131 
    AND PositionHierValidFromCalc < 20200131    
GROUP BY PersonnelID, Name, EmpStartCalc
) f2
on f1.RowId =f2.RowId 

-- Possibility 2
with f2 as (
SELECT 
    PersonnelID, Name, EmpStartCalc,
    MAX(PositionDetailsValidFromCalc) PD , 
    MAX(PositionHierValidFromCalc) PH, 
    MAX(PWAValidFromCalc) PWA, 
    MAX(RowId) AS RowId
FROM TV_IAMintegration_VW 
WHERE
    EmpStartCalc between 20200101 AND 20200131 
    AND PositionHierValidFromCalc < 20200131    
GROUP BY PersonnelID, Name, EmpStartCalc
)
SELECT *
FROM Tv_IAM_NumSequence f1
inner join f2 on f1.RowId =f2.RowId 

【讨论】:

  • 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
相关资源
最近更新 更多