选择是否具有第一条记录的案例

时间:2017-02-07 02:02:10

标签: sql sql-server

你能在SQL Server中做这样的事情吗?

我想从一个表中选择一个列中具有相同product_id的记录而在另一列中具有Y或N的表(在库存中),并选择第一个具有Y的表,其中product_id是相同,同时匹配另一个表中的product_id_set

... , 
SELECT
    (SELECT TOP 1 
         (product_name), 
         CASE 
            WHEN in_stock = 'Y' THEN product_name 
            ELSE product_name 
         END
     FROM  
         Products
     WHERE
         Products.product_set = Parent_Table.product_set) AS 'Product Name',    
    ...

样本数据将是

product_set   in_stock   product_id   product_name
---------------------------------------------------
     1          N           12        Orange
     1          Y           12        Pear
     2          N           12        Apple
     2          N           12        Lemon

product_set = 1的输出例如是'Pear'。

2 个答案:

答案 0 :(得分:1)

因此,根据以下问题的答案,有两种解决方案。如果没有产品ID的记录,其中in_stock值为' Y',是否应该返回任何内容?其次,如果有多行in_stock' Y',你关心它选择哪一行?

第一个解决方案假定您想要第一行,无论是否有任何" Y"值。

select *
from (select RID = row_number() over (partition by product_set order by in_stock desc) -- i.e. sort Y before N
      from Products) a
where a.RID = 1

第二个只会返回一个值,如果至少有一行带有' Y'对于in_stock。请注意,如果有多个in_stock项目,order by (select null)基本上是说你不关心它选择哪一个。如果您关心订单,请使用适当的排序条件进行更换。

select *
from (select RID = row_number() over (partition by product_set order by (select null)) -- i.e. sort Y before N
      from Products
      where in_stock = 'Y') a
where a.RID = 1

我不知道"父表的结构是什么"在您的查询中,我已将其简化为假设您仅在Products中拥有所需内容。

答案 1 :(得分:0)

SELECT ISNULL(
             (
                 SELECT TOP 1 product_name
                 FROM Products
                 WHERE Products.product_set = Parent_Table.product_set
                       AND Products.in_stock = 'Y'
             ), 'Not in the stock') AS 'Product Name'