簡體   English   中英

多個選擇語句多個條件

[英]Multiple select statements multiple conditions

想知道是否有人可以幫助我對加入語句的查詢。

我在某個時間段內將 1 個實踐的每個專業的平均分數與該時間段內所有其他實踐的每個代碼的平均分數(但不包括我正在比較的那個)進行基准測試。 我想知道是否有辦法加入我的陳述。 我當前的代碼是分開做的。 我不能使用聯合,因為它返回不同數量的行並且不查看相同的內容。 內部連接似乎也不起作用。 這一切都是從一個數據庫/表中提取的。

所以基本上我希望在各自的列中加入兩個復雜的查詢,比較不同數據過濾器的結果。 因此,將 1 的平均值與所有的平均值進行比較。

這取自下表: 在此處輸入圖像描述

這是我的代碼:

SELECT [specialty] as [Specialty]
      ,Replace([procedure_code],'.','') AS [Code]
      ,[procedure_description] as [Product Description]
      ,sum([cases]) as [Total Cases]
      ,AVG([Touchtime]) as [AVG Touchtime (mins)]
  FROM TableOutput
  where [trust_code] = 'RBA'
  AND [flag _emergency_case] = 'N' 
  AND [flag _cancellation] = 'N'
  AND CONVERT(datetime,date_of_visit,103) BETWEEN '2019/04/06 00:00:00.000' AND '2020/04/05 00:00:00.000'
  Group by [specialty]
      ,Replace([procedure_code],'.','')
      ,[procedure_description]
    

SELECT Replace([procedure_code],'.','') AS [Code]
      , AVG([Touchtime]) as [AVG Touchtime (mins)]
  FROM TableOutput
  where [region_code] = 'Y55'
  AND [trust_code] <> 'RBA'
  AND [flag _emergency_case] = 'N' 
  AND [flag _cancellation] = 'N'
  AND CONVERT(datetime,date_of_visit,103) BETWEEN '2019/04/06 00:00:00.000' AND '2020/04/05 00:00:00.000'
  Group by Replace([procedure_code],'.','')

您可以使用 Union 來連接這兩個查詢。 我看到它們都沒有相同數量的列,但是在這種情況下,第一個查詢只有五列,第二個查詢與第一列有兩個匹配,您可以將其余列添加為空。

SELECT [specialty] as [Specialty]
      ,Replace([procedure_code],'.','') AS [Code]
      ,[procedure_description] as [Product Description]
      ,sum([cases]) as [Total Cases]
      ,AVG([Touchtime]) as [AVG Touchtime (mins)]
  FROM TableOutput
  where [trust_code] = 'RBA'
  AND [flag _emergency_case] = 'N' 
  AND [flag _cancellation] = 'N'
  AND CONVERT(datetime,date_of_visit,103) BETWEEN '2019/04/06 00:00:00.000' AND '2020/04/05 00:00:00.000'
  Group by [specialty]
      ,Replace([procedure_code],'.','')
      ,[procedure_description]
    
UNION ALL 

SELECT 
null as [Specialty]
,Replace([procedure_code],'.','') AS [Code]
, null as [Product Description]
, null as [Total Cases]
, AVG([Touchtime]) as [AVG Touchtime (mins)]
  FROM TableOutput
  where [region_code] = 'Y55'
  AND [trust_code] <> 'RBA'
  AND [flag _emergency_case] = 'N' 
  AND [flag _cancellation] = 'N'
  AND CONVERT(datetime,date_of_visit,103) BETWEEN '2019/04/06 00:00:00.000' AND '2020/04/05 00:00:00.000'
  Group by Replace([procedure_code],'.','')

這應該可以工作,如果您需要區分數據來自哪個查詢的數據,您可以添加另一列以進一步過濾掉它。 我添加了一個[Type]列:

SELECT [specialty] as [Specialty]
      ,Replace([procedure_code],'.','') AS [Code]
      ,[procedure_description] as [Product Description]
      ,sum([cases]) as [Total Cases]
      ,AVG([Touchtime]) as [AVG Touchtime (mins)]
      , 'FromRBA' as [Type]
  FROM TableOutput
  where [trust_code] = 'RBA'
  AND [flag _emergency_case] = 'N' 
  AND [flag _cancellation] = 'N'
  AND CONVERT(datetime,date_of_visit,103) BETWEEN '2019/04/06 00:00:00.000' AND '2020/04/05 00:00:00.000'
  Group by [specialty]
      ,Replace([procedure_code],'.','')
      ,[procedure_description]

UNION ALL 

SELECT 
null as [Specialty]
,Replace([procedure_code],'.','') AS [Code]
, null as [Product Description]
, null as [Total Cases]
, AVG([Touchtime]) as [AVG Touchtime (mins)]
, 'NotFromRBA' as [Type]
  FROM TableOutput
  where [region_code] = 'Y55'
  AND [trust_code] <> 'RBA'
  AND [flag _emergency_case] = 'N' 
  AND [flag _cancellation] = 'N'
  AND CONVERT(datetime,date_of_visit,103) BETWEEN '2019/04/06 00:00:00.000' AND '2020/04/05 00:00:00.000'
  Group by Replace([procedure_code],'.','')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM