我正在尝试将手风琴数量计算为年度或月度状态。
这里是Y = Yearly,M = Monthly。
period_stats
我想根据Y
为period_stats
时的金额查询金额,然后将金额除以12,如果M
为case
则需要获得直接金额而不分割。
我不是sql的专家,所以经过一番搜索我发现我能做到 它在sql中使用
select period_stats, CASE period_stats WHEN 'Y' THEN (amount / 12) as amount_monthly ELSE amount END as 'amount_monthly' FROM tbale where id = 1;
,但我没有得到如何使用它。
我试过这种方式。如果我错误地使用它,请纠正我。
SELECT
period_stats,
ROUND(CASE WHEN (period_stats = 'Y') THEN (amount / 12) ELSE amount END, 2)
AS 'amount_monthly'
FROM table
WHERE id = 1;
如果有人知道任何其他技术,那么我将不胜感激,我也想知道。
更正查询以获得所需结果。 (通过使用Sebastian Brosch的答案)
amount_monthly
1005
结果:
static void Main(string[] args)
{
var subscriptionClient = new SubscriptionClient(
nsConnString,
topicName,
subsName,
ReceiveMode.ReceiveAndDelete);
subscriptionClient.AddRuleAsync(new RuleDescription
{
Filter = new CorrelationFilter { Label = Guid.NewGuid().ToString() },
Name = Guid.NewGuid().ToString()
}).Wait();
Console.WriteLine("Success");
Console.ReadKey();
}
答案 0 :(得分:3)
你很亲密。您可以使用以下解决方案:
SELECT
period_stats,
CASE WHEN (period_stats = 'Y') THEN (amount / 12) ELSE amount END AS 'amount_monthly'
FROM table
WHERE id = 1;
上面的查询使用以下语法:
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
来源: https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case
要仅显示两位小数,您可以使用TRUNCATE
(不舍入)或ROUND
(使用舍入)。
使用TRUNCATE
的解决方案:
SELECT
period_stats,
TRUNCATE(CASE WHEN (period_stats = 'Y') THEN (amount / 12) ELSE amount END, 2) AS 'amount_monthly'
FROM table
WHERE id = 1;
使用ROUND
的解决方案:
SELECT
period_stats,
ROUND(CASE WHEN (period_stats = 'Y') THEN (amount / 12) ELSE amount END, 2) AS 'amount_monthly'
FROM table
WHERE id = 1;
答案 1 :(得分:3)
你可以尝试一下。
select period_stats ,
IF(`period_stats`='Y',`Amount`/12 , `Amount`) AS amount_monthly
FROM table where id = 1;
答案 2 :(得分:2)
您可以这样编写查询:
SELECT period_stats,
CASE period_stats
WHEN "Y" THEN Amount/12
ELSE Amount
END AS 'amount_monthly'
FROM tbale where id = 1;