Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:当每个用户可以有多个具有相应诊断日期的条件时,是否可以返回每个用户只有一行的表?_Sql_Sql Server_Primary Key - Fatal编程技术网

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] ,

我主要是一名前端开发人员,我在SQL和数据库方面的经验通常非常有限,请在这里耐心等待。 下面是我的SQL查询:

       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“无法绑定”,并且许多列无效。我的错误,最后一个交叉应用出错。我现在已经更正了。请现在重试,上一个查询出错了,我忘记更改条件和所选列。现在试试