2011-12-15 5 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 

私はすべてNULLの最後の行を望んでいません。

私は彼らが最初のSELECTスタッフから来ていることを知っています。これは、一致する行がないはずであるからです。ユーザは学生なので一致しません。

すべてのフィールドにデータを含む行のみを表示する方法を知る必要があります。あなたはヌル行を提供しているあなたのUNIONのどの部分を知っている場合は

+0

んスタッフのSELECTは、単独で実行したときにnullを返す - 他の部分はなし? –

+0

単独で実行した場合、両方の部分が完全に実行されるわけではありません。私がそれらをUNIONするときだけ、NULLの行が得られ、それがStudent UserTypeのときだけです。 Staff UserTypeはNULLの行を返しません。 – user1040277

+0

本当にSQL Serverの質問はありますか?彼らがOpenQueryを通じてMySqlサーバーに行くと、SQL Serverの角度(および構文)から質問に答えようとするので、人の時間を無駄にしてしまいます。 –

答えて

0

WHERE NOT [Last Name] IS NULL 
+0

私はすべてのフィールドでこの構文を使用した後、エラー "無効なグループ機能の使用"構文が使用されました:WHERE NOT(st.last)IS NULL、NOT(st.first)IS NULL、NOT(ct.DeviceName)IS NULL – user1040277

1

を追加し、あなたはまず、それはあなたが望むものを返していることを確認し、そこにあなたの問題を解決し、それを見なければなりません。

あなたはそれがあるべきなクエリであることをそう満足している場合は、あなたが常に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'') 
+0

私は、 'EXCEPT の近くで使用する構文を確認するためのマニュアルを確認しています。「姓」は「姓」、NULLは「姓」です。最初の名前 "、DeviceNameとしてNULL、14行目にN" – user1040277

+0

私はあなたのために構文エラーをデバッグするつもりはありませんが、GROUP BYの後ろの右括弧は開始するのに適しているかもしれません。 –

+0

GROUP BYの後に右かっこがありますか?ORDER BY 4 DESCの後ろにある括弧を意味していますか? ')あなたのシステムを持っていて、あなたの完全なSQlを実行していません。あなたが何を意味するのか分かりません。 – user1040277

関連する問題