Как мне избавиться от целого ряда NULL, когда я использую UNION? - PullRequest
0 голосов
/ 16 декабря 2011
Select * from OPENQUERY (PORTAL,
''SELECT st.last AS "Last Name", st.first AS "First Name", ct.DeviceName, SUM
         (ct.PageCount) AS "Count", pm.TotalPerPage
FROM printer_stats.Counts ct 
INNER JOIN dv.staff st on st.id = ct.UserID
LEFT JOIN network_map.PrintersToDevices ptd ON ptd.DeviceID = ct.DeviceID
LEFT JOIN network_map.PrinterModels pm ON ptd.PrinterID = pm.PrinterID
WHERE ct.UserID = "'+@UserID+'" and ct.PageCount > 0 and ct.Date >= "'+@AcademicYTD+'"
UNION
 SELECT stu.last_name AS "Last Namae", stu.first_name AS "First Name", 
ct.DeviceName,SUM(ct.PageCount) AS "Count", pm.TotalPerPage 
FROM printer_stats.Counts ct
INNER JOIN dv.student stu on stu.username = ct.Username
LEFT JOIN network_map.PrintersToDevices ptd ON ptd.DeviceID = ct.DeviceID
LEFT JOIN network_map.PrinterModels pm ON ptd.PrinterID = pm.PrinterID
WHERE ct.UserID = "'+@UserID+'" and ct.PageCount > 0 and ct.Date  
>= "'+@AcademicYTD+'" 
GROUP BY ct.DeviceName 
ORDER BY 4 DESC'')

Я получаю такие результаты:

 Last Name  First Name DeviceName       Count TotalPerPage
 Stewart    Jesse      BG-LMC-HP4100-01 39    0.0287581
 Stewart    Jesse      BG-LMC-HP4100-02 9     0.0287581
 Stewart    Jesse      BG-903-RI4210    2     0.013341
 Stewart    Jesse      BG-218-HP4000    1     0.013341
 NULL       NULL       NULL             NULL  NULL

Я не хочу последний ряд всех NULL.

Я знаю, что они приходят с первого SELECT для персонала, поскольку не должно быть совпадающих строк: пользователь - студент, поэтому совпадения не будет.

Мне нужно знать, как отображать только строки с данными во всех полях.

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Если вы знаете, какая часть вашего UNION предоставляет пустую строку, вы должны сначала взглянуть на нее, убедиться, что она возвращает то, что вы хотите, и исправить вашу проблему там.

Однако, если выВ противном случае вы удовлетворены тем, что запрос такой, каким он должен быть, вы всегда можете взломать с помощью EXCEPT SELECT NULL -конструктуры: (я включил окружающие строки для справки)

...
WHERE ct.UserID = "'+@UserID+'" and ct.PageCount > 0 and ct.Date   >= "'+@AcademicYTD+'" 
EXCEPT
SELECT NULL AS "Last Name", NULL AS "First Name", NULL as DeviceName, NULL AS "Count",  NULL AS TotalPerPage
GROUP BY ct.DeviceName
ORDER BY 4 DESC'')  
0 голосов
/ 16 декабря 2011

Добавить

WHERE NOT [Last Name] IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...