Sql server 从左表中获取所有行,并在其他列的基础上删除重复行';s值

Sql server 从左表中获取所有行,并在其他列的基础上删除重复行';s值,sql-server,duplicates,left-join,Sql Server,Duplicates,Left Join,场景:我有一个薪资主管主表,即基本、人力资源、Cnveyance。。。等等。[列为:ID、SalaryHeadName] 和1个事务表,用于保存每个候选人的薪资记录[列为:CandidateID、SalaryHeadID、Amount] 现在,我想在应聘者的个人资料页面上列出所有的工资头,用户将在其中看到所有的工资头以及这些工资头前面的一个可编辑文本框 如果事务处理表包含特定候选人的特定薪资总额,我将填写该金额,否则该文本框将为空 我到目前为止的疑问是: WITH cte as ( Select

场景:我有一个薪资主管主表,即基本、人力资源、Cnveyance。。。等等。
[列为:ID、SalaryHeadName]

和1个事务表,用于保存每个候选人的薪资记录<代码>[列为:CandidateID、SalaryHeadID、Amount]

现在,我想在应聘者的个人资料页面上列出所有的工资头,用户将在其中看到所有的工资头以及这些工资头前面的一个可编辑文本框

如果事务处理表包含特定候选人的特定薪资总额,我将填写该金额,否则该文本框将为空

我到目前为止的疑问是:

WITH cte as
(
Select ID,SalaryHeadName, Amount, DENSE_RANK () over (order by SalaryHeadName desc) as DenseRank 
from VW_GetSalaryStructureData 
where CandidateID = 145 or CandidateID is null 
GROUP BY  ID,SalaryHeadName,Amount

)

SELECT
    ID,SalaryHeadName, Amount, COUNT(Amount) as cnt
FROM
    cte
GROUP BY
    ID,SalaryHeadName, Amount
两个表中的示例数据:

该查询的结果是:

现在,我想要的是删除具有
NULL
值的重复行,并只列出一次所有的工薪族

预期结果:


下面的查询应返回预期结果

BEGIN

WITH cte as ( Select ID,SalaryHeadName, Amount, DENSE_RANK () over (order by SalaryHeadName desc) as DenseRank  from VW_GetSalaryStructureData  where CandidateID = 145 or CandidateID is null  GROUP BY  ID,SalaryHeadName,Amount

)

SELECT
    ID,SalaryHeadName, Amount, COUNT(Amount) as cnt INTO #RESULT_TABLE FROM
    cte GROUP BY
    ID,SalaryHeadName, Amount;

WITH RM_DUPL AS 
(SELECT ROW_NUMBER OVER(PARTITION BY ID ORDER BY AMOUNT NULLS LAST) AS RN,  ID,SalaryHeadName, Amount, cnt FROM #RESULT_TABLE) SELECT  FROM RM_DUPL  WHERE RN = 1 or AMOUNT IS NOT NULL; END;

并非所有人都知道联合运营商删除了重复项。这在您需要重复数据消除时非常方便。详情如下:

 SELECT ColA, ColB, ColC
 FROM TableWithDuplicates
 UNION
 SELECT ColA, ColB, ColC
 FROM TableWithDuplicates

结果是TableWithDuplicates的重复数据消除结果集。

我希望以下查询能够满足您在所需输出图像上提到的需求

SELECT SH.Id SalaryHeadId, SH.SalaryHeadName, ISNULL(Tr.Amount, 0.00) PerMonth, 
ISNULL(Tr.Amount, 0.00)*12 PerAnnum
FROM Sal_Head SH
LEFT JOIN Transaction_Table Tr ON SH.Id = Tr.SalaryHeadId
WHERE Tr.CandidateId = 145

请分享这两个表格的一些样本数据。May advice-删除多余的第一段,它不添加任何内容,并显示您为whiney。显示您得到的内联结果,显示您想要得到的结果。这样你的问题就会更容易理解,你的回答也会更快answer@ShyamVemula请检查我编辑的样本数据question@AzeemShaikh兄弟。示例输出如何。@shyamvula'请单击查看结果:'此文本具有我发布的查询的链接结果
 SELECT ColA, ColB, ColC
 FROM TableWithDuplicates
 UNION
 SELECT ColA, ColB, ColC
 FROM TableWithDuplicates
SELECT SH.Id SalaryHeadId, SH.SalaryHeadName, ISNULL(Tr.Amount, 0.00) PerMonth, 
ISNULL(Tr.Amount, 0.00)*12 PerAnnum
FROM Sal_Head SH
LEFT JOIN Transaction_Table Tr ON SH.Id = Tr.SalaryHeadId
WHERE Tr.CandidateId = 145