在where子句中使用'stuff'变量

dwthyt8l  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(438)

下面是我们使用的查询代码:

  1. SELECT
  2. CONVERT(DATE, Nominations.Nomination_Date_Created) AS Nomination_Date_Created,
  3. Nominations.Nomination_Status,
  4. (CASE
  5. WHEN MIN(EPORT.dbo.FDA_Divisions.division_name) = MAX(EPORT.dbo.FDA_Divisions.division_name)
  6. THEN MIN(EPORT.dbo.FDA_Divisions.division_name)
  7. ELSE 'Multiple Divisions'
  8. END) AS Employee_Division,
  9. Nominations.Nomination_Awarded_For,
  10. Nominations.Nomination_Awarded_Other,
  11. Nom.First_Name + ' ' + Nom.Last_Name AS Nominator_Name,
  12. Nominations.Nomination_Group_UUID,
  13. Nominations.Nomination_Group_Name,
  14. Nominations.Nomination_Group_Time_off_Sum,
  15. Nominations.Nomination_Group_Cash_Sum,
  16. Nominations.Nomination_Type,
  17. Nominations.Nomination_Identifier, Nominations.Nomination_Employee_UUID,
  18. Nominations.Nomination_Nominator_ID, Nominations.Nomination_NOAC,
  19. STUFF((SELECT ', ' + NOMGroup.division_name
  20. FROM vw_group_nomination_divisions NOMGroup
  21. WHERE NOMGroup.Nomination_Group_UUID = Nominations.Nomination_Group_UUID
  22. FOR XML PATH('')), 1, 1, '') divList
  23. FROM
  24. Nominations
  25. INNER JOIN
  26. ePort.dbo.Employees AS Employees_1 ON Employees_1.CapHR_ID = Nominations.Nomination_Employee_CapHR_ID
  27. LEFT OUTER JOIN
  28. ePort.dbo.FDA_Offices ON Employees_1.office_id = ePort.dbo.FDA_Offices.office_id
  29. LEFT OUTER JOIN
  30. ePort.dbo.FDA_Centers ON Employees_1.center_ID = ePort.dbo.FDA_Centers.Center_ID
  31. LEFT OUTER JOIN
  32. ePort.dbo.FDA_Divisions ON Employees_1.division_id = ePort.dbo.FDA_Divisions.division_ID
  33. LEFT OUTER JOIN
  34. ePort.dbo.Employees AS Nom ON Nominations.Nomination_Nominator_ID = Nom.CapHR_ID
  35. LEFT OUTER JOIN
  36. ePort.dbo.Employees AS NomAppRTO ON Nominations.Nomination_Approving_Officer_NED_ID = NomAppRTO.CapHR_ID
  37. GROUP BY
  38. CONVERT(DATE, Nominations.Nomination_Date_Created),
  39. Nominations.Nomination_Awarded_For, Nominations.Nomination_Status,
  40. Nominations.Nomination_Awarded_Other,
  41. Nom.First_Name + ' ' + Nom.Last_Name,
  42. Nominations.Nomination_Type, Nominations.Nomination_Group_UUID,
  43. Nominations.Nomination_Group_Name,
  44. Nominations.Nomination_Group_Time_off_Sum,
  45. Nominations.Nomination_Group_Cash_Sum,
  46. Nominations.Nomination_Identifier, Nominations.Nomination_Type,
  47. Nominations.Nomination_Employee_UUID,
  48. Nominations.Nomination_Nominator_ID, Nominations.Nomination_NOAC
  49. HAVING
  50. (Nominations.Nomination_Type = 'Group')
  51. AND (YEAR(CONVERT(DATE, Nominations.Nomination_Date_Created)) IN ('2020'))
  52. ORDER BY
  53. Nomination_Date_Created DESC, Nominations.Nomination_Group_UUID

输出:

  1. | Id | divList |
  2. +--------------------------------------+-------------------+
  3. | 3462BF9B-5056-9C58-994BFFC6A38E7368 | DLR, DTD, OHCM |
  4. | 3B8202C2-5056-9C58-99C591AA86B3A1C9 | OHCM |
  5. | CB5A722C-5056-9C58-9983C1F6C66C0AD7 | DTD, STMD |

输出就是我们需要它的方式,然而,我们需要能够搜索它,而我们不能让它工作。那么,如何引用stuff函数在查询的where子句中创建的列“name”?
如果可能的话,我们需要在having或where子句中搜索'divlist'列中的值。例如divlist in('ohcm')。
每当我引用“divlist”时,就会出现错误:列名“divlist”无效。
这会将结果过滤到记录1和记录2。
我希望这能更好地解释这一点。

vh0rcniy

vh0rcniy1#

你不要绳子。使用更基本的逻辑:

  1. having sum(case when division_name = 'ccc' then 1 else 0 end) > 0
bqjvbblv

bqjvbblv2#

临时表如何与视图关联。您需要将临时表与“提名”视图连接起来。

  1. SELECT ID,
  2. STUFF((SELECT ', ' + NOMGroup.division_name
  3. FROM vw_group_nomination_divisions NOMGroup
  4. WHERE NOMGroup.Nomination_Group_UUID = nom.Nomination_Group_UUID
  5. FOR XML PATH('')), 1, 1, '') Name
  6. FROM temp1
  7. JOIN vw_group_nomination_divisions nom ON temp1.ID = nom.ID
  8. WHERE Nominations.[Name] = 'ccc'
  9. GROUP by ID

相关问题