在sql server中使用if-else(取消透视)
我只想基于产品id运行一条sql语句: 如果产品id=0,则我要运行以下sql语句:在sql server中使用if-else(取消透视),sql,sql-server,tsql,Sql,Sql Server,Tsql,我只想基于产品id运行一条sql语句: 如果产品id=0,则我要运行以下sql语句: SELECT QuarterName as Quarters, QuarterValue FROM ( SELECT month_key, sum(Q1)Q1, sum(Q2)Q2, sum(Q3)Q3, sum(Q4)Q4 FROM myTable where line_item_id = '2548'
SELECT QuarterName as Quarters, QuarterValue
FROM
(
SELECT month_key,
sum(Q1)Q1, sum(Q2)Q2, sum(Q3)Q3, sum(Q4)Q4
FROM myTable
where line_item_id = '2548'
group by month_key
) stu
UNPIVOT
(QuarterValue FOR QuarterName IN (Q1, Q2, Q3, Q4)
) AS QTR
where month_key =2016
SELECT QuarterName as Quarters, QuarterValue
FROM
(
SELECT month_key,
sum(Q1)Q1, sum(Q2)Q2, sum(Q3)Q3, sum(Q4)Q4
FROM myTable
where line_item_id = '2548'
and product_id = 'wq2745'
group by month_key
) stu
UNPIVOT
(QuarterValue FOR QuarterName IN (Q1, Q2, Q3, Q4)
) AS QTR
where month_key =2016
如果产品id为0,则我要运行以下sql语句:
SELECT QuarterName as Quarters, QuarterValue
FROM
(
SELECT month_key,
sum(Q1)Q1, sum(Q2)Q2, sum(Q3)Q3, sum(Q4)Q4
FROM myTable
where line_item_id = '2548'
group by month_key
) stu
UNPIVOT
(QuarterValue FOR QuarterName IN (Q1, Q2, Q3, Q4)
) AS QTR
where month_key =2016
SELECT QuarterName as Quarters, QuarterValue
FROM
(
SELECT month_key,
sum(Q1)Q1, sum(Q2)Q2, sum(Q3)Q3, sum(Q4)Q4
FROM myTable
where line_item_id = '2548'
and product_id = 'wq2745'
group by month_key
) stu
UNPIVOT
(QuarterValue FOR QuarterName IN (Q1, Q2, Q3, Q4)
) AS QTR
where month_key =2016
区别在于第一个查询在where子句中不使用产品id,但第二个查询使用产品id。我在C应用程序中运行这些sql查询,因此产品id值是基于一些下拉框的参数 这里不需要两个不同的查询。您可以使用大小写表达式轻松地处理此问题。像这样的
SELECT QuarterName as Quarters, QuarterValue
FROM
(
SELECT month_key,
sum(Q1)Q1, sum(Q2)Q2, sum(Q3)Q3, sum(Q4)Q4
FROM myTable
where line_item_id = '2548'
and product_id = case @ProductId when <> 0 then 'wq2745' else product_id end
group by month_key
) stu
UNPIVOT
(QuarterValue FOR QuarterName IN (Q1, Q2, Q3, Q4)
) AS QTR
where month_key =2016
在以下情况下使用isNull:
或者以这种方式使用If和两个语句:
declare @ProductId varchar(6);
set @ProductId = 'wq2745'
if @ProductId = '0'
begin;
select
Quarters = QuarterName
, QuarterValue
from (
select month_key
, sum(Q1) Q1
, sum(Q2) Q2
, sum(Q3) Q3
, sum(Q4) Q4
from myTable
where line_item_id = '2548'
group by month_key
) stu
unpivot(QuarterValue for QuarterName in (Q1, Q2, Q3, Q4)) as QTR
where month_key = 2016
end;
if @ProductId != '0'
begin;
select QuarterName as Quarters
, QuarterValue
from (
select month_key
, sum(Q1) Q1
, sum(Q2) Q2
, sum(Q3) Q3
, sum(Q4) Q4
from myTable
where line_item_id = '2548'
and product_id = @ProductId
group by month_key
) stu
unpivot(QuarterValue for QuarterName in (Q1, Q2, Q3, Q4)) as QTR
where month_key = 2016
end;
你的案例表达不应该是相反的吗?当“0”时使用案例@ProductId,然后使用产品\u id else@ProductIdend@SqlZim是的,我想是的。哦,谢谢,我要试试这个,但在我这么做之前,我想告诉你,产品id并不总是固定的,它会随着下拉列表的改变而改变,所以我们需要像你在这里做的那样初始化产品id的值吗?@moe不,你不需要,但你需要将它作为一个参数传递。