2012-10-19 46 views
2
SELECT 
--DISTINCT 
organizations.Name,users.FName, users.LName, UserTypes.Name, users.Email, Users.id, 
(SELECT COUNT(MessageId)) As MsgsReceived, 
(SELECT COUNT(MessageID) 
WHERE Messages.Urgency = 1) AS LowMsgsReceived, 
(SELECT COUNT(MessageID) 
WHERE Messages.Urgency = 2) AS MedMsgsReceived, 
(SELECT COUNT(MessageID) 
WHERE Messages.Urgency = 3) AS HighMsgsReceived 
FROM Users 
INNER JOIN Recipients ON 
Users.ID = Recipients.UserId 
INNER JOIN Messages ON 
Messages.ID = Recipients.MessageID 
INNER JOIN UserTypes ON 
Users.UserTypeID = UserTypes.ID 
INNER JOIN Organizations ON 
Users.OrganizationId = Organizations.Id 
GROUP BY organizations.Name,users.FName, users.LName, UserTypes.Name, users.Email, Users.id, Messages.Urgency 
ORDER BY Users.FName 

計數給我錯誤的接收到的消息級別的結果。下面的查詢給我正確的計數,但我不想顯示null的一些行,顯示0,而不是任何幫助?針對別名行的動態查詢

+0

你是什麼意思的「如何子表綁定父表」嗎?孩子是哪張桌子?父母是哪張桌子?在什麼情況下你需要他們綁定? – pete

回答

0

試試這個

 Select u.fname, u.lName, u.Id, 
     Count(m.Id) messagesRecvd, 
     Sum(Case m.Urgency When 1 Then 1 End) LowMsgsRecvd, 
     Sum(Case m.Urgency When 2 Then 1 End) MedMsgsRecvd, 
     Sum(Case m.Urgency When 3 Then 1 End) HighMsgsRecvd 
    From users u 
     Left Join (Messages m Join Recipients r 
         On r.MessageId = m.Id) 
      On r.UserId = u.Id 
    Group By u.fname, u.lName, u.Id 
    Order by u.fName 
+0

感謝您的答覆,您的答案輸出類似於我的,但如何綁定子表與父表? –

0

你也可以試試這個:

SELECT  --DISTINCT 
      organizations.Name 
      , users.FName 
      , users.LName 
      , UserTypes.Name 
      , users.Email 
      , Users.id 
      , COUNT(MessageId) As MsgsReceived 
      , SUM(CASE WHEN Messages.Urgency = 1 THEN 1 ELSE 0 END) AS LowMsgsReceived 
      , SUM(CASE WHEN Messages.Urgency = 2 THEN 1 ELSE 0 END) AS MedMsgsReceived 
      , SUM(CASE WHEN Messages.Urgency = 3 THEN 1 ELSE 0 END) AS HighMsgsReceived 
FROM  Users 
      INNER JOIN Recipients 
       ON Users.ID = Recipients.UserId 
      INNER JOIN Messages 
       ON Messages.ID = Recipients.MessageID 
      INNER JOIN UserTypes 
       ON Users.UserTypeID = UserTypes.ID 
      INNER JOIN Organizations 
       ON Users.OrganizationId = Organizations.Id 
GROUP BY organizations.Name 
      ,users.FName 
      , users.LName 
      , UserTypes.Name 
      , users.Email 
      , Users.id 
      , Messages.Urgency 
ORDER BY Users.FName