2013-05-16 34 views
-2

我在這裏有一些代碼,但首先我想解釋我的問題。如何在裏面創建帶有變量的視圖?

我想創建一個視圖,但因爲我的SELECT聲明HASE一些variables在裏面我看到了一些答案與function視圖中的那不可能的,但我不知道參數是如何工作的。

這裏是我的代碼

CODE:

DECLARE @totalRecords INT 
DECLARE @I INT 

SELECT @I = 1 

SELECT @totalRecords = COUNT([Id]) FROM [dbo].[Werkzaamheden] 

WHILE (@I <= @totalRecords) 

BEGIN 

SELECT 
    U.[Id] 
    , G.[Naam] 
    , W.[Omschrijving] 
    , U.[datum] 
    , CONVERT(VARCHAR,100)+'%' AS 'Status' 
    , W.[Norm] 
    , W.Id 

FROM [Werkzaamheden] W 
     RIGHT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */ 
     FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam] 

WHERE U.[Status]= 1 AND W.Id = @I 

UNION 

SELECT 
    U.[Id] 
    , G.[Naam] 
    , W.[Omschrijving] 
    , U.[datum] 
    , CONVERT(VARCHAR,0)+'%' AS 'Status' 
    , W.[Norm] 
    , W.Id 
FROM [Werkzaamheden] W 
     LEFT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */ 
     FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam] 

WHERE U.[Status]= 0 AND W.Id = @I 

UNION 

SELECT 
    U.[Id] 
    , G.[Naam] 
    , W.[Omschrijving] 
    , U.[datum] 
    , null AS 'Status' 
    , '' AS Norm 
    , W.Id 
FROM [Werkzaamheden] W 
     RIGHT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */ 
     FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam] 

WHERE U.[Status]IS NULL 

    SELECT @I = @I + 1 

END 

什麼是最好的salution?

這是它返回:

Id Naam Omschrijving datum Status Norm Id 
NULL Johan NULL NULL NULL 0 NULL 
8 Piet Luisteren 2013-05-14 0% 95 3 
9 Klaas Luisteren 2013-05-16 100% 95 3 
13 Klaas Luisteren 2013-05-17 0% 95 3 
14 Janneke Luisteren 2013-05-17 100% 95 3 

Id Naam Omschrijving datum Status Norm Id 
NULL Johan NULL NULL NULL 0 NULL 
4 Janneke Schoonmaken 2013-05-14 100% 20 2 
5 Jan Schoonmaken 2013-05-14 0% 20 2 
10 Piet Schoonmaken 2013-05-16 100% 20 2 
11 Janneke Schoonmaken 2013-05-16 100% 20 2 
12 Piet Schoonmaken 2013-05-17 100% 20 2 

,這是很好的

+2

你想做什麼?逐行循環遍歷Werkzaamheden,並將每行的UNION作爲單獨的結果集返回?爲什麼?這應該是一個單一的選擇 – gbn

+0

這是一個posibilitie,但除此之外,我必須使IF ELSE structer,但這是更快的超時他們告訴我 – Jeroen

+2

我懷疑它是更快,我不明白你爲什麼使用IF ELSE – gbn

回答

4

爲什麼不呢?沒有循環,沒有聯盟?

SELECT 
    U.[Id] 
    , G.[Naam] 
    , W.[Omschrijving] 
    , U.[datum] 
    , CASE 
      WHEN U.Status = 1 THEN CONVERT(VARCHAR,100)+'%' 
      WHEN U.Status = 0 THEN CONVERT(VARCHAR,100)+'%' 
      ELSE NULL 
     END AS 'Status' 
    , W.[Norm] 
    , W.Id 

FROM [Werkzaamheden] W 
     RIGHT JOIN [Uitgevoerd] U ON U.[Taak] = W.[Id] /*or left */ 
     FULL JOIN [Gebruikers] G ON G.[Naam] = U.[Naam] 
WHERE 
    U.Status = 0 OR U.Status = 1 OR U.Status IS NULL 
+0

循環是爲了別的結果我每次都會回來新的選擇當Werkzaamheden的Id被改變,這就是我想要的 – Jeroen

+0

@Jeroen:解釋那爲什麼。給我們提供的信息來回答這個問題... – gbn

+0

結果我每次都回來時,新的選擇當Werkzaamheden的Id被改變,這就是我想要的 – Jeroen

相關問題