2015-01-26 25 views
0

我對我們的應用程序中的複選框,可以有1 3的選擇:使用計數,而總

  • 選中(真)
  • 未籤(假)
  • 使用客戶(賬戶)設置(從以上覆選框然後將變灰的複選框。

Check/Uncheck/Nothing Checked

如果選中「使用客戶...」(Use Customer ...)框,指向它的箭頭框變爲灰色&該值將從數據庫中刪除。 如果選中,則爲「真」 如果未選中但未選中「使用客戶...」,則爲「假」 如果選中「使用客戶...」,則沒有記錄。

我的問題是拉它的SQL。我可以在沒有問題的情況下提取TRUE/FALSE值。我卡住試圖讓t-sql返回SOMETHING,如果記錄是空白的。

目前我有這個工作正常:

CASE when cb.tvalue.value('declare namespace y="http://schemas.xyzpdg.com/framework/resources";y:Item[1]', 'varchar(25)') = 'True' THEN 'Checked' 
     when cb.tvalue.value('declare namespace y="http://schemas.xyzpdg.com/framework/resources";y:Item[1]', 'varchar(25)') = 'False' THEN 'Unchecked' 
    END AS [CheckboxValue]-- 

我已經嘗試使用:

When COUNT(cb.tvalue.value('declare namespace y="http://schemas.xyzpdg.com/framework/resources";y:Item[1]', 'varchar(25)')) = 0 then 'Use Customer...' 

但是,當我用那當然,我收到了臭名昭著的...」 在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。「 錯誤。我不能將XML用作GROUP BY。

任何想法?謝謝。

+1

這是爲什麼標籤TSQL? – Paparazzi 2015-01-27 05:41:28

+0

您付出了很多努力來描述似乎與問題無關的用戶界面,但不會向我們展示您顯然嘗試使用的xml嗎? – 2015-01-27 07:35:58

+0

我很抱歉。我以爲我確實包含了上面的t-sql代碼。看來,我一個人理解它。感謝您的善意和周到的答覆。 – 2015-01-27 13:21:29

回答

1

如果我理解正確的話,似乎要麼你可以使用exist XML類型的方法或case語句的簡單else分支,看樣:

declare @xml xml; 
--set @xml = '<Test><Item>False</Item></Test>'; 
--set @xml = '<Test><Item>True</Item></Test>'; 
set @xml = '<Test />'; 

select 
    case 
     when @xml.value('(/Test/Item)[1]', 'varchar(25)') = 'True' then 'Checked' 
     when @xml.value('(/Test/Item)[1]', 'varchar(25)') = 'False' then 'Unchecked' 
     when @xml.exist('(/Test/Item)[1]') = 0 then 'Use Customer...' 
    end [CheckboxValue]; 

select 
    case 
     when @xml.value('(/Test/Item)[1]', 'varchar(25)') = 'True' then 'Checked' 
     when @xml.value('(/Test/Item)[1]', 'varchar(25)') = 'False' then 'Unchecked' 
     else 'Use Customer...' 
    end [CheckboxValue];