2013-07-22 1 views
0

tblData 및 tblUser가 있습니다.SQLServer에서 사용자가 수행 할 수있는 트랜잭션을 가져 오는 쿼리

나는 사용자가 취할 수있는 트랜잭션 만 표시하려고합니다.

DisplayNum의 트랜잭션 중 하나가 tblUser의 TransType과 일치하지 않으면 해당 DisplayNum에서 TransType을 사용할 수 없습니다.

enter image description here

+0

원하는 출력을 명확히 할 수 있습니까? 왜 C3가 포함되어 있지 않고 왜 D5 Checkout 10이 가치로서 9가 아닌 10을 보여 줍니까? tblUser에도 DisplayNum 필드가 포함되어 있습니까? – jpw

+0

@jpw 사용자가 Take In을 사용하지 않아 C3가 포함되지 않습니다. DisplayNum에 대해 가장 높은 값만 출력해야하는 마지막 행은 생략하십시오. – Apollo

+0

@jpw D5 Check out + D5 No Shoe Trans Times가 10에 추가되기 때문에 D5는 TransTime에 대해 10입니다. – Apollo

답변

1

일부 채팅 후 함께 넣어 최종 버전 :

SELECT DISTINCT q2.Id, q3.SubQ, q1.DisplayNum, q1.TransType, q1.TotalTransTime, q1.UserId 
FROM (
    SELECT D.DisplayNum, HighestTransTime.TransType, SUM(D.TransTime) AS TotalTransTime, U.UserId 
    FROM tblData D 
    INNER JOIN tblUser U ON D.TransType=U.TransType 
    INNER JOIN 
     (
     SELECT DISTINCT innerQuery.DisplayNum, TransType 
     FROM tblData 
     INNER JOIN 
      (
      SELECT DisplayNum, MAX(TransTime) AS TransTime FROM tblData GROUP BY DisplayNum 
      ) innerQuery ON tblData.DisplayNum = innerQuery.DisplayNum AND tblData.TransTime = innerQuery.TransTime 
     ) HighestTransTime ON D.DisplayNum=HighestTransTime.DisplayNum 
    WHERE U.UserId = 10 
    AND D.TransType IN (SELECT TransType FROM tblUser WHERE tblUser.UserId = U.UserId) 
    AND D.DisplayNum NOT IN (SELECT DisplayNum FROM tblData WHERE TransType NOT IN (SELECT TransType FROM tblUser WHERE tblUser.UserId = U.UserId)) 
    GROUP BY D.DisplayNum, HighestTransTime.TransType, U.UserId 
    ) q1 
INNER JOIN (SELECT DisplayNum, MAX(ID) AS ID FROM tblData GROUP BY DisplayNum) q2 ON q1.DisplayNum = q2.DisplayNum 
INNER JOIN (SELECT SubQ, ID FROM tblData) q3 ON q2.ID=q3.ID 
ORDER BY q2.ID 
+0

테스트 할 것입니다. 왜 당신은 CASE C.TransType 'No Show'를 가지고 있습니까? 그러면 'Check Out'. 다른 트랜스가 있다면? – Apollo

+0

거의 다 왔어. D5 Process 및 D5 Checkout에 대해 다른 사례가있는 경우 어떻게 처리합니까? D5 Checkout 14 때마다 바뀔 수 있습니다. – Apollo

+0

UserID에 대한 매개 변수는 어디서 추가 할 수 있습니까? – Apollo

0

은 지금까지 당신이 TransType 열을 조인 간단한 사용할 수 있습니다 이해할 수있다.

SELECT * 
FROM dbo.tblData INNER JOIN dbo.tblUser ON 
dbo.tblData .TransType = dbo.tblUser .TransType 
+1

이 답변은 요구 사항을 충족시키지 못합니다. DisplayNum의 트랜잭션이 tblUser의 TransType과 일치하지 않는 경우 사용자는 해당 DisplayNum에서 TransType을 사용할 수 없습니다. '또한 요구 사항에 따라 총 transtime을 합산하지 않습니다. – jpw

관련 문제