2010-09-13 18 views
5

我有一個select語句,我想說如果這個select語句沒有返回任何行,然後在每個單元格中放一個''。我該怎麼做呢?SQL如果沒有行返回這樣做

+2

在每個細胞的什麼? – 2010-09-13 16:53:15

+0

把一個''放在什麼細胞裏? SSRS報告?一個Excel電子表格? – 2010-09-13 16:53:42

+0

我有2個單位。 1有數據,1沒有。我想顯示1個單位的數據,但只顯示所有其他單位數據沒有數據的空白。如果那有意義的話? – user380432 2010-09-13 16:55:12

回答

2

這聽起來像你還沒有得到你想要的所有行。真正?我認爲@Joe Sefanelli爲您的解決方案提供了一個重要部分,然後提到您需要將INNER更改爲LEFT聯接。

所以,你說你想顯示單位列表中的所有單位。而且,如果沒有單位數據,則​​顯示單位和空白數據不存在。

這是一個可能的解決方案。將您的FROM子句更改爲以下內容:

FROM [dbo].[Unit] u 
LEFT OUTER JOIN 
    (
    SELECT * 
    FROM [dbo].[IUA] i 
    JOIN [dbo].[Reports] r ON r.[Report_ID] = i.[Report_ID] 
    JOIN [dbo].[State] s ON i.[St_ID] = s.[St_Id] 
    WHERE r.[Account] = [dbo].[fn_Get_PortalUser_AccountNumber](11-11) 
     AND r.[Rpt_Period] = '2126' 
     AND r.[RptName] = 'tfd' 
     AND r.[Type] = 'h'  
    ) ir ON ir.[Unit_ID] = u.[Unit_ID] 
LEFT JOIN [dbo].[UnitType] ut ON u.[UnitType] = ut.[UnitType] 
WHERE u.[Unit] IN (SELECT [VALUE] 
       FROM dbo.udf_GenerateVarcharTableFromStringList(@Units, ',')) 
; 

通過此更改,您將獲得@Units列表中的單位列表。左外連接將包含與每個單元關聯的數據,但如果沒有關聯數據則不會排除單位。

+0

這實際上會返回所有報告期間不起作用,因爲我只想得到2126.有不同報告期間的單位數據,但本報告期間沒有數據。如果我將它移動到where子句中,它仍然不會再返回任何行。 – user380432 2010-09-13 18:00:08

+0

糟糕。誤讀你的關於where子句的評論。 – bobs 2010-09-13 18:06:58

+0

是的,我相信我們是,但這不會再返回....嗯。 – user380432 2010-09-13 18:10:49

4

試試這個 -

IF NOT EXISTS (SELECT 'x' FROM <TABLE> ....) 
BEGIN 
    -- Your logic goes here 
END 
+0

問題是我可以有1個單位顯示數據和1個單位,不顯示數據,因此這隻會顯示一個單位的數據,但我希望兩個單位顯示.... – user380432 2010-09-13 16:54:19

+0

@anicolais - 爲您的第二個單位你想要顯示空白數據,看到來自tenfour的答案。這會有幫助嗎? – 2010-09-13 16:55:56

+0

在OP – user380432 2010-09-13 17:01:40

8
select a, b, c from t 
if @@rowcount = 0 
    select '' as a, '' as b, '' as c 

但要確保你明白''可能有不同的數據類型比列abc

3

把你的空白行選擇在基於張貼代碼工會

select x.JobName , x.Description 
from MasterJobList x 
where x.IsCycleJob = 1 

union all 

select "" , "" 
from MasterJobList x 
where not exists 
    (
    select 1 
    from MasterJobList x 
    where x.IsCycleJob = 1 
    ) 
1

的底部,我認爲你正在尋找空出從UNITTYPE表中的列因爲這是你唯一的一個」重新加入。在這種情況下,使用

ISNULL(ut.[Description], '') AS UnitType 
+0

中有初始查詢如果我說u.number ='e2499',它仍然不返回任何行,它只是不給出任何行。我需要它給出單位號碼,但沒有數據。 – user380432 2010-09-13 17:06:08

+0

然後,您當前的一些INNER連接需要是LEFT連接,具體取決於哪些表沒有找到匹配的行。然後使用ISNULL在我的答案中也將這些列留空。 – 2010-09-13 17:07:31

+0

沒有匹配行的表是IUA,所以我不確定我會在這裏做什麼,因爲在做ISNULL時大多數有轉換錯誤 – user380432 2010-09-13 17:29:03

0
select top 1 isnull(max(col2),' ') as noNullCol from table1 where col1='x' 

最大返回null這裏沒有行再isnull函數返回' '而不是null

0

下面是我用一個列的例子 - 它很容易,只如果沒有產生一個空白行匹配數據集。

select Company from customer where [email protected] 
union 
select '' where not exists (select 1 from customer where [email protected]) 

這會在沒有匹配時創建一行空白(s)。

相關問題