2016-02-19 39 views
0

我有一个t-sql表列出了多个位置的协议。TSQL组按列

色谱柱:

  • STID =商店ID
  • AStatID =协议状态ID(1 =活动)
  • PayModeID =(1每日=,2 =每周,等等。)
  • 然后每个的PayMode的列达

我试图让我们每月潜在来自活跃协议,每家商店的收入。

这是我到目前为止,但我得到的错误“子查询返回多个值1”

我哪里错了?

SET NOCOUNT ON 
Declare @dPotential Money, 
    @wPotential Money, 
    @bPotential Money, 
    @sPotential Money, 
    @mPotential Money, 
    @Potential Money; 

Set @dPotential = (((Select Agreemnt.DailyRate FROM Agreemnt WHERE Agreemnt.PayModeID = 1 And Agreemnt.AStatID = 1)*365)/12) 
Set @wPotential = (((Select Agreemnt.WeeklyRate FROM Agreemnt WHERE Agreemnt.PayModeID = 2 And Agreemnt.AStatID = 1)*52)/12) 
Set @bPotential = (((Select Agreemnt.WeeklyRate FROM Agreemnt WHERE Agreemnt.PayModeID = 3 And Agreemnt.AStatID = 1)*52)/12) 
Set @sPotential = (((Select Agreemnt.DailyRate FROM Agreemnt WHERE Agreemnt.PayModeID = 4 And Agreemnt.AStatID = 1)*24)/12) 
Set @mPotential = ((Select Agreemnt.DailyRate FROM Agreemnt WHERE Agreemnt.PayModeID = 5 And Agreemnt.AStatID = 1)* 12) 

Set @Potential = @dPotential + @wPotential + @bPotential + @sPotential + @mPotential 

Select Agreemnt.STID, @Potential From Agreemnt 
Group By Agreemnt.STID 
+1

这些查询到您的变量分配值来返回多行多 – Lamak

回答

1

尝试是这样的:

SELECT 
    a.STID, 
    SUM(
    CASE a.PayModeID 
     WHEN 1 THEN a.DailyRate * 365/12 
     WHEN 2 THEN a.WeeklyRate * 52/12 
     WHEN 3 THEN a.WeeklyRate * 52/12 
     WHEN 4 THEN a.DailyRate * 24/12 
     WHEN 5 THEN a.DailyRate * 12 
    END) as Potential 
FROM Agreemnt a 
WHERE a.AStatID = 1 
GROUP BY a.STID 
+0

你是一个刻着天才!我爱你!大声笑 – thelincster

0

这是一个数据问题。您需要查看其中哪些返回多个值以及为什么。使用这些qeres看到的数据是什么:

Select * FROM Agreemnt WHERE Agreemnt.PayModeID = 1 And Agreemnt.AStatID = 1 
Select * FROM Agreemnt WHERE Agreemnt.PayModeID = 2 And Agreemnt.AStatID = 1 
Select * FROM Agreemnt WHERE Agreemnt.PayModeID = 3 And Agreemnt.AStatID = 1 
Select * FROM Agreemnt WHERE Agreemnt.PayModeID = 4 And Agreemnt.AStatID = 1 
Select * FROM Agreemnt WHERE Agreemnt.PayModeID = 5 And Agreemnt.AStatID = 1 

注意我用SELECT *这里,因为它很可能会在表中的其他领域之一是造成重复。修复将取决于数据的含义。这可能意味着您需要使用聚合函数或附加的where子句。