使用不带聚合的计数

时间:2015-01-26 21:11:51

标签: tsql

我的应用程序中有一个复选框,可以有3个选项之一:

  • Checked(True)
  • 未选中(错误)
  • 使用客户(帐户)设置(从上面的复选框中将灰显复选框。

Check/Uncheck/Nothing Checked

如果选中“使用客户...”框,则带有指向它的箭头的框会变灰&该值将从数据库中删除。 如果选中,“True” 如果未选中,但未选中“使用客户...”,则“为假” 如果选中“使用客户...”,则没有记录。

我的问题是为它拉动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 个答案:

答案 0 :(得分: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];