2013-09-05 33 views
0

好的,所以问题的总体范围是我使用表值函数,以便SSRS可以创建关于数据的各种报表,然后使用另一个程序来拼接所有这些报表一起。所以无论如何,问题是我需要获得一个列的值,如果该行中的另一列包含一定的值。然后在将该值添加到另一个位置之后,将新值返回到数据库行的列中,以便其他报告和使用该数据。因此,例如:如果符合特定条件,从一行中获取信息

RETURNS @ReportTable table 
(
str_beta_group varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
str_alpha_group varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
str_group varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
debit decimal(24, 6) NULL, 
credit decimal(24, 6) NULL, 
    credit_total decimal(24,6) NULL 

) 

我是新来的数据库开发,我已经试过各种方法,我无法弄清楚如何获得语法正确,我总是错误告终。因此,基于表上的我怎么会写这个逻辑用T-SQL语法:

decimal epsilon_temp, gamma_temp; 
    if(str_group='epsilon') 
{ 
epsilon_temp = credit; --the credit from that row where str_group = epsilon 
} 
else if(str_group='gamma') 
{ 
gamma_temp = credit; --the credit from that row where str_group = gamma 
} 
--Then after that UPDATE 
UPDATE @ReportTable 
SET credit_total = SUM(epsilon_temp + gamma_temp) 
WHERE str_group = epsilon 

回答

0

我以什么你需要一个猜测。这是关于如何通过str_group获取数据和分组结果?这看起来如何:

SELECT 
    CASE WHEN str_group is NULL THEN 'TOTAL' ELSE str_group END str_group 
    SUM(credit) credit 
FROM 
    table 
GROUP BY GROUPING SETS 
    ((),(str_group)) 
+0

谢谢你的回答。然而,那不是我真正想要的。我想也许我解释了它有点麻烦。所以我现在试着更好地解释它。上表中的一行将有一个str_beta_group,str_alpha_group,str_group,debit,credit和credit_total的列...对不起意外地打开进入开发.. –