你能在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'。
答案 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'