在一个表中,我有914行,其中有一列包含";是或否";值(是=193否=721总计914(。
在这篇文章中,我想创建一个函数来在select语句中使用多少是和否
我写了一个查询
create function TSS(
@string as nvarchar(20)
)
returns int
begin
declare @result int
if (@string='NO')
select @result=sum(case Re_engaged when 'NO' then 1 else null end) from TVS_PRE
else if (@string='YES')
select @result=sum(case Re_engaged when 'YES' then 1 else null end) from TVS_PRE
return @result
end
select [dbo].[TSS]('Yes') as columns_with_Yes,[dbo].[TSS]('No') as columns_with_No from TVS_PRE
我得到的结果是
Columns_with_Yes | Columns_with_No |
---|---|
1 | 193 |
2 | 193 |
3 | 193 |
直至 | |
914 | 193 |
您应该将其合并为一个查询
SELECT
sum(case Re_engaged when 'NO' then 1 end) Columns_with_No,
sum(case Re_engaged when 'YES' then 1 end) Columns_with_Yes
FROM TVS_PRE;
如果你真的想把它作为一个函数,你可以把它变成一个内联的表值函数
CREATE FUNCTION TSS()
RETURNS TABLE
AS RETURN (
SELECT
sum(case Re_engaged when 'NO' then 1 end) Columns_with_No,
sum(case Re_engaged when 'YES' then 1 end) Columns_with_Yes
FROM TVS_PRE
);
GO
我不理解你的需求。。。但如果你只想要一排。。。则不要使用";从":
select [dbo].[TSS]('Yes') as columns_with_Yes,[dbo].[TSS]('No') as columns_with_No
使用此语法
SELECT DISTINCT COUNT(CASE WHEN Re_engaged='No' then 1 else NULL end) OVER () AS No_col,
COUNT(CASE WHEN Re_engaged='Yes' then 1 else NULL end) OVER () AS Yes_col
FROM TVS_PRE