需要sql中select函数的帮助



在一个表中,我有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_YesColumns_with_No
1193
2193
3193
直至
914193

您应该将其合并为一个查询

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

最新更新