2013-05-16 4 views
-2

여기에 몇 가지 코드가 있지만 처음에는 내 질문을 explane하고 싶습니다.변수가 포함 된 뷰를 만드는 방법은 무엇입니까?

내가보기를 만들려하지만 내 SELECT 문 하세 거기에 일부 variables 내가 function 몇 가지 답변을 볼 수 있기 때문에보기에서 가능하지 먹으 렴하지만 난 매개 변수가 어떻게 작동하는지 잘 모릅니다. 여기

내 코드

코드 :

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을 별도의 결과 집합으로 반환 하시겠습니까? 왜? 이 하나의 SELECT – gbn

+0

posibilitie되어야하지만 그렇지 않으면 나는 그저 구조체를 만들 필요가 있지만 그들은 시간이 excecute 더 빠르다 그들은 내게 말했다 – Jeroen

+2

나는 그것이 더 빠르다는 것을 나는 의심 할 여지없이 당신이 사용하는 이유를 볼 수 없다 – gbn

답변

4

왜하지? 루프가없고 UNION이 없습니까?

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의 이드가 변경되었을 때 그 번호가 바뀌 었습니다. – Jeroen

+0

@ 제로 엔 : 설명해주십시오. 그땐 왜. 이 질문에 답하기위한 정보를주세요 ... – gbn

+0

Werkzaamheden의 ID가 변경되었을 때마다 매번 새로운 선택 결과가 나옵니다. 그게 내가 원하는 것입니다. – Jeroen

관련 문제