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