2011-12-15 38 views
-1
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 = "'[email protected]+'" and ct.PageCount > 0 and ct.Date >= "'[email protected]+'" 
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 = "'[email protected]+'" and ct.PageCount > 0 and ct.Date 
>= "'[email protected]+'" 
GROUP BY ct.DeviceName 
ORDER BY 4 DESC'') 

我得到的結果是這樣的:當我使用UNION時,如何擺脫整行NULL?

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 

我不希望所有的空值的最後一排。

我知道他們來自職員的第一個SELECT,因爲應該沒有匹配的行:用戶是學生,所以不會有匹配。

我需要知道如何只顯示所有字段中的數據行。

+0

不工作人員的SELECT也會在單獨運行時返回空值 - 沒有工會的其他部分? – 2011-12-16 00:45:54

+0

單獨運行時,兩個部件都不會完美運行。只有當我使用UNION時,我纔會得到NULL行,並且只有當它是Student UserType時。 Staff UserType不返回NULL行。 – user1040277 2011-12-16 15:34:31

+0

您的任何問題是否都是針對SQL Server的?如果他們都通過OpenQuery訪問MySql服務器,那麼您或多或少會浪費人們的時間,因爲他們(或者我至少)會嘗試從SQL Server角度(和語法)回答您的問題。 – 2011-12-17 01:40:45

回答

0

添加

WHERE NOT [Last Name] IS NULL 
1

如果你知道你UNION的一部分提供的空行,你應該先看看它,確保它返回你想要什麼,有解決您的問題。

但是,如果你以其他方式償付查詢是理所應當的,你總是可以做一個黑客與EXCEPT SELECT NULL - 建造(我已經包括了周圍的參考線)

... 
WHERE ct.UserID = "'[email protected]+'" and ct.PageCount > 0 and ct.Date >= "'[email protected]+'" 
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'')