SQL:当每个用户可以有多个具有相应诊断日期的条件时,是否可以返回每个用户只有一行的表?
我主要是一名前端开发人员,我在SQL和数据库方面的经验通常非常有限,请在这里耐心等待。 下面是我的SQL查询:SQL:当每个用户可以有多个具有相应诊断日期的条件时,是否可以返回每个用户只有一行的表?,sql,sql-server,primary-key,Sql,Sql Server,Primary Key,我主要是一名前端开发人员,我在SQL和数据库方面的经验通常非常有限,请在这里耐心等待。 下面是我的SQL查询: Use UsersDB SELECT a.[UserID] ,a.[FirstName] ,a.[LastName] ,a.[DOB] ,b.[Allergy] ,b.[Severity] ,
Use UsersDB
SELECT a.[UserID]
,a.[FirstName]
,a.[LastName]
,a.[DOB]
,b.[Allergy]
,b.[Severity]
,c.[ConditionName]
,c.[DiagnosisDate]
,d.[TestDate]
,e.[MedName]
,e.[StartDate]
,f.[VaccineName]
FROM [UsersDB].[dbo].[vwUser] a
INNER JOIN [dbo].[vwUserAllergy] b ON b.[UserID] = a.[UserID]
INNER JOIN [dbo].[vwUserCondition] c on c.[UserID] = a.[UserID]
INNER JOIN [dbo].[vwUserLabTest] d on d.[UserID] = a.[UserID]
INNER JOIN [dbo].[vwUserMedication] e.[UserID] = e.[UserID]
INNER JOIN [dbo].[vwUserVaccination] f on f.[UserID] = a.[UserID]
在这个查询中,我在UserID上将多个表连接在一起
在我的dashboard web应用程序中,我希望有一个包含所有用户的表,并且每个用户只希望该表中有一行。我使用此查询生成信息以在web应用程序中填充该表,但我遇到的问题是,此查询为每个用户返回多行(因为每个用户可以有多个具有各自日期的条件,多个具有各自开始日期的药物,等等)
是否可以解决此问题?在这种情况下,您可以将交叉应用与top 1一起使用 您可以在每个应用程序上添加一个排序列,这样您将拥有最新的或可能是第一条记录。这取决于你的情况
SELECT a.[UserID]
,a.[FirstName]
,a.[LastName]
,a.[DOB]
,b.[Allergy]
,b.[Severity]
,c.[ConditionName]
,c.[DiagnosisDate]
,d.[TestDate]
,e.[MedName]
,e.[StartDate]
,f.[VaccineName]
FROM [UsersDB].[dbo].[vwUser] a
CROSS APPLY (SELECT TOP 1 b1.[Allergy], b1.[Severity] FROM [dbo].[vwUserAllergy] b1 WHERE b1.[UserID] = a.[UserID]) b
CROSS APPLY (SELECT TOP 1 c1.[ConditionName], c1.[DiagnosisDate] FROM [dbo].[vwUserCondition] c1 WHERE c1.[UserID] = a.[UserID]) c
CROSS APPLY (SELECT TOP 1 d1.[TestDate] FROM [dbo].[vwUserLabTest] d1 WHERE d1.[UserID] = a.[UserID]) d
CROSS APPLY (SELECT TOP 1 e1.[MedName], e1.[StartDate] FROM [dbo].[vwUserMedication] e1 WHERE e1.[UserID] = a.[UserID]) e
CROSS APPLY (SELECT TOP 1 f1.[VaccineName] FROM [dbo].[vwUserVaccination] f1 WHERE f1.[UserID] = a.[UserID]) f
问题是,如果用户有两种过敏症,您希望看到哪些数据?您需要只在主视图中显示用户并向下钻取以查看其他数据,或者需要显示多行并在UI中通过分组使其美观。我尝试在SSMS中执行该查询,但它返回了错误的语法errors@AliciaGuerra对答案做了一些修改,请重试。我得到的错误是“多部分标识符”d1.UserID“无法绑定”,并且许多列无效。我的错误,最后一个交叉应用出错。我现在已经更正了。请现在重试,上一个查询出错了,我忘记更改条件和所选列。现在试试