基于另一个特定值的返回列

时间:2017-12-07 01:18:07

标签: sql teradata

我试图展示我们公司提供的产品已经在某个时间点购买。我想显示每个产品的名称,然后在每个产品旁边显示一个简单的Y或N,表明它是否在特定日期之前出售。我不确定如何构建查询 - 这是我的尝试

SELECT product_offering as Product
CASE WHEN date_key='2017-03-30' THEN product_sold ELSE product_sold END as Sold
FROM table1

如果作为缩短的例子,它应该看起来像

第一个产品出售2017-03-27

第二个产品已售出2017-04-03

第3个产品2017-3-28销售

|Product | Sold |
|1st Prod|   Y  |
|2nd Prod|   N  |
|3rd Prod|   Y  |
相反,"已售出#34;专栏并不完全准确。我认为这与日期等于特定日期而不是导致的范围有关,但我不确定如何解决这个问题。

3 个答案:

答案 0 :(得分:0)

如果我理解正确,你需要这样的东西:

SELECT product_offering as Product,
       (CASE WHEN MIN(date_key) <= '2017-03-30' THEN 'Y' ELSE 'N' END) as Sold
FROM table1
GROUP BY table1

答案 1 :(得分:0)

您可以使用以下查询来实现此目的:

Select product,(case when min(date_key)<='2017-03-
30' then 'y' else 'n' end) as sold from table1 group by product

答案 2 :(得分:0)

如果我正确理解您的问题,即您需要将列date_keydate value(在您的示例中为2017-03-30)进行比较,如果更少,则返回{{1} } else Y。在那种情况下,我认为不需要聚合。

您只需要N

case
上述查询中的

select product_offering as Product, case when date_key <= DATE '2017-03-30' then 'Y' else 'N' end as Sold from table1 order by product_offering <=取决于您是否要包含<

<强>结果:

date value

<强> DEMO

P.S。上面的演示也适用于+-------------+------+ | PRODUCT | SOLD | +-------------+------+ | 1st product | Y | | 2nd product | N | | 3rd product | Y | +-------------+------+ (并且已经过测试)