Sql server 如何避免SQL查询的最终结果重复
Sql server 如何避免SQL查询的最终结果重复,sql-server,Sql Server,DECLARE@Doc INT='21' 选择不同的 [姓名或头衔] ,[主题] ,[批准说明] ,TypeOfApproval.[Name]为[TypeOfApproval] ,TypeOfExpense.[Name]为[TypeOfExpense] ,ExpenseNature.【名称】为[ExpenseNature] ,BudgetType.[Name]为[BudgetType] ,序号。[名称]为[当前状态] ,[ImageBits]作为Imj 从[SaveImage].[dbo].[U
DECLARE@Doc INT='21'
选择不同的
[姓名或头衔]
,[主题]
,[批准说明]
,TypeOfApproval.[Name]为[TypeOfApproval]
,TypeOfExpense.[Name]为[TypeOfExpense]
,ExpenseNature.【名称】为[ExpenseNature]
,BudgetType.[Name]为[BudgetType]
,序号。[名称]为[当前状态]
,[ImageBits]作为Imj
从[SaveImage].[dbo].[UBL]记录
在[SaveImage].[dbo].[UBL\u状态更改].[State\u ID]=Rec.[State\u ID]上左键联接[SaveImage].[dbo].[UBL\u状态更改]
在[SaveImage].[dbo].[UBL\U ApprovalType].[UBL\U ID]=Rec.[ID]上左键联接[SaveImage].[dbo].[UBL\U ApprovalType]
左联合[SaveImage].[dbo].[ApprovalType]批准类型对批准类型的批准。[ID]=[SaveImage].[dbo].[UBL\U ApprovalType].[ApprovalType\U ID]
在[SaveImage].[dbo].[UBL\U费用性质].[UBL\U费用性质].[UBL\U ID]=Rec.[ID]上左键联接[SaveImage].[dbo].[UBL\U费用性质]
将[SaveImage].[dbo].[Expense]类型上的[Expense]类型左联接。[ID]=[SaveImage].[dbo].[UBL\U费用性质].[Expense性质\U ID]
左联接[SaveImage].[dbo].[UBL\U费用性质]在[SaveImage].[dbo].[UBL\U费用性质].[UBL\U ID]=Rec.[ID]
在ExpenseNature上左键联接[SaveImage].[dbo].[费用性质]ExpenseNature.[ID]=[SaveImage].[dbo].[UBL\U费用性质].[Expense性质\U ID]
在[SaveImage].[dbo].[UBL\U预算状态].[UBL\U ID]=Rec.[ID]上左键联接[SaveImage].[dbo].[UBL\U预算状态]
左联合[SaveImage].[dbo].[Budget Status]BudgetType ON BudgetType.ID=[SaveImage].[dbo].[UBL\U预算状态].[Budget Status\U ID]
记录上的内部联接[SaveImage].[dbo].[State]SN.[State\u ID]>=SN.ID
左连接[SaveImage].[dbo].[Img]Imj上的Imj。[CreatorName]=SN.[Name]
其中Rec.[ID]=(@Doc)
请注意,您需要在表中按id分区并按此列联接。是否尝试过此方法:使用DISTINCT ON(列名称)
预期的输出是什么?它们不是重复的,而是具有不同
当前状态的行
您希望返回哪一行?我只想返回一行,然后返回4个不同的Imj[列]值,因为记录相同但具有不同的状态。如果您可以编辑此帖子并提供预期输出,则会更好:)预期输出将是除Imj列之外的所有列都保持不变,Imj列的值将与列名称(如imj1、imj2、imj3、IMJ4)匹配谢谢您的帮助。对初学者来说,向你们两位这样的技术人员学习真的很有帮助。我正在处理表的不同联接,我的结果集如上所述。我需要转换一个列的值,并将它们求值为具有相同行ID的不同列。为此,我需要使用T-Sql的Pviot函数。请纠正我,如果它可以帮助生成所需的结果集。
; with cte as
(
select [approval description]
, typeofapproval
, typeofexpense
, expensenature
, budgettype
, [current state]
, imj
, column_or_composition_of_columns_that_are_primary_key
, rn = row_number() over (partition by column_or_composition_of_columns_that_are_primary_key order by [current state])
from table_name
)
select cte.[approval description]
, cte.typeofapproval
, cte.typeofexpense
, cte.expensenature
, cte.budgettype
, cte.currentstate
, cte.imj
, cte2.imj
, cte3.imj
, cte4.imj
from cte
where rn = 1
left join (select imj
from cte
where rn = 2) cte2 on cte.column_or_composition_of_columns_that_are_primary_key = cte2.column_or_composition_of_columns_that_are_primary_key
left join (select imj
from cte
where rn = 3) cte3 on cte.column_or_composition_of_columns_that_are_primary_key = cte3.column_or_composition_of_columns_that_are_primary_key
left join (select imj
from cte
where rn = 4) cte3 on cte.column_or_composition_of_columns_that_are_primary_key = cte4.column_or_composition_of_columns_that_are_primary_key
SELECT DISTINCT ON Column_1, column_2 FROM TABLE_NAME