我遇到了这个问题 我有这张表
private boolean resetPointValue = false;
// initializes rollClicked method when ROLL button is clicked
public void rollClicked(View v) {
int dice1, dice2;
betInt = Integer.valueOf(bettingSpinner.getSelectedItem().toString());
Random rand1 = new Random();
Random rand2 = new Random();
dice1 = rand1.nextInt(6) + 1;
dice2 = rand2.nextInt(6) + 1;
// sets values for dice images
if(dice1 == 1) {
dice1Image.setImageResource(R.drawable.die1);
d1 = 1;
}
else if(dice1 == 2) {
dice1Image.setImageResource(R.drawable.die2);
d1 = 2;
}
else if(dice1 == 3) {
dice1Image.setImageResource(R.drawable.die3);
d1 = 3;
}
else if(dice1 == 4) {
dice1Image.setImageResource(R.drawable.die4);
d1 = 4;
}
else if(dice1 == 5) {
dice1Image.setImageResource(R.drawable.die5);
d1 = 5;
}
else if(dice1 == 6) {
dice1Image.setImageResource(R.drawable.die6);
d1 = 6;
}
if(dice2 == 1) {
dice2Image.setImageResource(R.drawable.die1);
d2 = 1;
}
else if(dice2 == 2) {
dice2Image.setImageResource(R.drawable.die2);
d2 = 2;
}
else if(dice2 == 3) {
dice2Image.setImageResource(R.drawable.die3);
d2 = 3;
}
else if(dice2 == 4) {
dice2Image.setImageResource(R.drawable.die4);
d2 = 4;
}
else if(dice2 == 5) {
dice2Image.setImageResource(R.drawable.die5);
d2 = 5;
}
else if(dice2 == 6) {
dice2Image.setImageResource(R.drawable.die6);
d2 = 6;
}
// calculate sum of dice for each roll
if (rounds >= 0)
{
rollTotal = sum(dice1, dice2);
roll.setText(String.valueOf(rollTotal));
}
else {
point.setText(String.valueOf(pointValue));
}
// win on first roll
if((dice1 + dice2 == winNumber1 || (sum(dice1, dice2) == winNumber2)) && rounds == 0) {
winsCounter++;
bankRollInt = bankRollInt + betInt;
bankRollText.setText(String.valueOf(bankRollInt));
// display win result
results.setVisibility(View.VISIBLE);
resetPointValue = true;
}
// lose on first roll
else if(rounds == 0 && (sum(dice1, dice2) == loseNumber1 || sum(dice1, dice2) == loseNumber2 || sum(dice1, dice2) == loseNumber3)){
loseCounter++;
bankRollInt = bankRollInt - betInt;
bankRollText.setText(String.valueOf(bankRollInt));
results.setVisibility(View.VISIBLE);
results.setText("House wins! You Lose.");
resetPointValue = true;
}
// display round results if no win or lose on first roll
else if(rounds == 0) {
pointValue = sum(dice1, dice2);
results.setVisibility(View.VISIBLE);
point.setText(String.valueOf(pointValue));
bankRollText.setText(String.valueOf(bankRollInt));
results.setText("Point established. It is " + pointValue + ". Roll Again.");
resetPointValue = false;
}
// lose if player hits 7 after first roll
if(rounds > 0 && (sum(dice1, dice2) == 7)) {
loseCounter++;
bankRollInt = bankRollInt - betInt;
bankRollText.setText(String.valueOf(bankRollInt));
results.setVisibility(View.VISIBLE);
results.setText("House wins! You Lose.");
resetPointValue = true;
}
// player wins if roll = pointValue after first roll
else if(rounds > 0 && (sum(dice1, dice2) == pointValue)) {
winsCounter++;
bankRollInt = bankRollInt + betInt;
bankRollText.setText(String.valueOf(bankRollInt));
// display win result
results.setVisibility(View.VISIBLE);
resetPointValue = true;
}
// display round results if no win or lose after first roll
else if(rounds > 0 && (sum(dice1, dice2) != pointValue && sum(dice1, dice2) != 7)){
results.setVisibility(View.VISIBLE);
bankRollText.setText(String.valueOf(bankRollInt));
results.setText("No one wins. Keep rolling Dice.");
}
if(resetPointValue == true) {
rounds = 0;
pointValue = 0;
}
else {
rounds++;
}
} // end rollClicked method
// calculate sum of dice
public int sum(int num1, int num2) {
return num1 + num2;
} // end sum method
所以我想要的是案例1订单1将从案例2订单1减去金额,然后从案例2订单1减去案例3订单1,然后案例1订单2减去案例2订单2,然后减去案例3订单2等 就像一个连锁反应
公式(案例1订单1-案例2订单1) - 案例3订单1
结果必须像这样
Case Order Amount
1 1 50
1 2 20
1 3 25
2 1 35
2 2 40
2 3 38
3 1 45
3 2 50
3 3 25
答案 0 :(得分:0)
您需要一个相关的子查询,您可以在其中添加金额。你可以看到公式很简单:
select
mycase,
myorder,
(
select sum(case when mycase = 1 then amount else -amount end)
from mytable other
where other.myorder = mytable.myorder
and other.mycase <= mytable.mycase
) as amount
from mytable
order by mycase, myorder;
我将列命名为mycase
和myorder
,因为case
和order
都是SQL中的保留字。当然,您可以将这些名称与引号("order"
,"case"
)一起使用,但我不想引用列名。
答案 1 :(得分:0)
Thorsten的解决方案可能使用了正确的逻辑,它只是在SUM中使用了错误的列名:
select
mycase,
myorder,
(
select sum(case when mycase = 1 then amount else -amount end)
from mytable other
where other.myorder = mytable.myorder
and other.mycase <= mytable.mycase
) as amount
from mytable
order by mycase, myorder;
您的SQL Server发布了什么? 如果它支持累积和,那么它很简单:
select t.*,
sum(case when mycase = 1 then Amount else -Amount end)
over (partition by myorder
order by mycase
rows unbounded preceding)
from tab as t
答案 2 :(得分:0)
感谢所有人,我想出了我在这里找到的这个公式:
WITH q AS
(
SELECT *,
ROW_NUMBER() OVER ORDER BY (num1) AS rn
FROM mytable
)
SELECT qc.*, qc.num1 - qp.num2
FROM q qc
LEFT JOIN
q qp
ON qp.rn = qc.rn - 1