2014-09-25 70 views
0

我是使用SQL Server的新手,我試圖將此查詢轉換爲我可以在SQL Server中使用的東西。我一直在使用Google搜索來找到正確的結構,但我似乎無法看到任何涉及「用戶定義變量」的內容。使用用戶定義的變量將MySQL轉換爲TSQL

任何幫助,將不勝感激。

什麼,我想實現概述...

我有6列,我需要獲得6列的中位數,但只有在有至少4個響應。該字段中的可能值爲1-5,其中0爲無響應。

SELECT 
    GCAID, 
    @countOfValuesGSS1 := (
     CASE 
      WHEN CEQ106 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
     CASE 
      WHEN CEQ114 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
     CASE 
      WHEN CEQ123 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
     CASE 
      WHEN CEQ132 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
     CASE 
      WHEN CEQ142 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
     CASE WHEN CEQ143 BETWEEN 1 AND 5 THEN 1 ELSE 0 END), 
    @sumOfValuesGSS1 := (
    CASE 
     WHEN CEQ106 BETWEEN 1 AND 5 THEN CEQ106 ELSE 0 END + 
    CASE 
     WHEN CEQ114 BETWEEN 1 AND 5 THEN CEQ114 ELSE 0 END + 
    CASE 
     WHEN CEQ123 BETWEEN 1 AND 5 THEN CEQ123 ELSE 0 END + 
    CASE 
     WHEN CEQ132 BETWEEN 1 AND 5 THEN CEQ132 ELSE 0 END + 
    CASE 
     WHEN CEQ142 BETWEEN 1 AND 5 THEN CEQ142 ELSE 0 END + 
    CASE 
     WHEN CEQ143 BETWEEN 1 AND 5 THEN CEQ143 ELSE 0 END), 
    if(@countOfValuesGSS1 >= 4, ROUND((@sumOfValuesGSS1/@countOfValuesGSS1),2), NULL) AS b_GSSMAJ1, 
    MAJ1, 
FROM 
    v_ags_all 
+0

而不是「@ countOfValuesGSS1:=」使用「countOfValuesGSS1」並將IF替換爲case語句p – 2014-09-25 07:33:08

回答

0

SQL Server不支持同一類型的行內變量的概念,但它不支持所謂的Common Table Expressions (CTE)另一個構造,就需要變化不大原始查詢:

;WITH cte AS 
(
    SELECT GCAID, 
      (
       CASE WHEN CEQ106 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
       CASE WHEN CEQ114 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
       CASE WHEN CEQ123 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
       CASE WHEN CEQ132 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
       CASE WHEN CEQ142 BETWEEN 1 AND 5 THEN 1 ELSE 0 END + 
       CASE WHEN CEQ143 BETWEEN 1 AND 5 THEN 1 ELSE 0 END 
      ) AS countOfValuesGSS1, 
      (
       CASE WHEN CEQ106 BETWEEN 1 AND 5 THEN CEQ106 ELSE 0 END + 
       CASE WHEN CEQ114 BETWEEN 1 AND 5 THEN CEQ114 ELSE 0 END + 
       CASE WHEN CEQ123 BETWEEN 1 AND 5 THEN CEQ123 ELSE 0 END + 
       CASE WHEN CEQ132 BETWEEN 1 AND 5 THEN CEQ132 ELSE 0 END + 
       CASE WHEN CEQ142 BETWEEN 1 AND 5 THEN CEQ142 ELSE 0 END + 
       CASE WHEN CEQ143 BETWEEN 1 AND 5 THEN CEQ143 ELSE 0 END 
      ) AS sumOfValuesGSS1, 
      MAJ1 
    FROM v_ags_all 
) 

SELECT GCAID, 
     CASE WHEN countOfValuesGSS1 >= 4 THEN 
      ROUND(sumOfValuesGSS1/countOfValuesGSS1, 2) 
     END AS b_GSSMAJ1, 
     MAJ1 
FROM cte; 

熱膨脹係數基本上充當即時觀看。它們可以讓你做出與你所提供的相同的東西,雖然稍微有些冗長。

另一個小的變化是將內聯IF語句轉換爲CASE語句。