我想基于每一行中的给定公式来计算单元格值。
输入记录为:
预期输出为:
答案 0 :(得分:1)
第一件事是您的公式不正确。据我了解,每个sl
都有一个唯一的行。要做sum
和col1
中的col2
,正确的公式是(col1 + col2)
。所以先纠正一下。
之后,您可以使用动态sql作为实现
create table tab_sum ( id int, col1 int, col2 int, col varchar(max) )
insert into tab_sum ( id, col1, col2, col )
values ( 1, 3, 5, '(col1 + col2)' )
, ( 2, 4, 6, '(col1 + col2)' )
DECLARE @query NVARCHAR(MAX) = '';
WITH CTE_DistinctFormulas AS
(
SELECT DISTINCT col as Formula FROM tab_sum
)
SELECT @query = @query + '
UNION ALL
SELECT id, col1, col2, col, ' + Formula + ' AS CalcValue FROM tab_sum WHERE col = ''' + Formula + ''' '
FROM CTE_DistinctFormulas;
SET @query = STUFF(@query,1,12,'');
PRINT @query;
EXEC (@query);
或者如果您不希望编辑公式,则可以尝试执行此操作,但是请确保每个id及其相应的值只有一行,否则它将所有相似的行合计为一。
create table tab_sum ( id int, col1 int, col2 int, col varchar(max) )
insert into tab_sum ( id, col1, col2, col )
values ( 1, 3, 5, 'sum(col1 + col2)' )
, ( 2, 4, 6, 'sum(col1 + col2)' )
DECLARE @query NVARCHAR(MAX) = '';
WITH CTE_DistinctFormulas AS
(
SELECT DISTINCT col as Formula FROM tab_sum
)
SELECT @query = @query + '
UNION ALL
SELECT id, col1, col2, col, ' + Formula + ' AS CalcValue FROM tab_sum WHERE col = ''' + Formula + ''' group by id, col1, col2, col '
FROM CTE_DistinctFormulas;
SET @query = STUFF(@query,1,12,'');
PRINT @query;
EXEC (@query);
答案 1 :(得分:0)
您看过case /表达式了吗?请参阅MS doc:CASE
所以您的查询就像:
SELECT sl, audience_1, audience_2, audience_3,
CASE WHEN audience_3 > 0 THEN audience_1 + audience_3
ELSE audience_1 + audience_2
END audience_total
FROM audience
;
您没有提供标准,所以我不得不猜测:-)
(由于我没有方便的服务器,所以我没有运行查询:-))
OP发表评论后进行更新:
如果同一表中的受众群体有71个不同的列,那么问题就不同了。
那么我的解决方法是:
sl
将受众群体编号拆分到详细信息表中,
audience_type
和Audience_count audience_calc_config
和calc_method
创建一个audience_type
表JOIN
,GROUP BY sl
和SUM(audience)
进行简单选择答案 2 :(得分:0)
我认为您想要这样的东西:
select *,case when row_cal like '%1%' and row_cal like '%2%' then value1 + value2
when row_cal like '%1%' and row_cal like '%3%' then value1 + value3
end as result from YourTable