所以我有这样的表:
id | description | code | unit_value | short
1 | awesome product DG | CODEB14 | null | BT
2 | awesome product | CODE14 | 5005 | NOBT
3 | product less awe BGO | CODEB15 | null | BT
4 | product less awe | CODE15 | 5006 | NOBT
对于带有DG,BGO的项目,我需要显示'unit_value',但需要基于没有DG,BGO的项目。因此,“ awesome product DG”项具有与“ “很棒的产品”项目。但是我不能为'short = BT'的项目赋值。
因此,到目前为止,我有两个查询,其中有一些我想如何合并:
select value_i_need from my_table where short= 'BT'
select value_i_need from my_table where short!= 'BT' and description like '%awesome product%'
我不知道如何合并这两个查询?一些建议会很有帮助。
答案 0 :(得分:0)
您只想要or
吗?
select value_i_need
from my_table
where short = 'BT' or
(short <> 'BT' and description like '%here is the name%')
答案 1 :(得分:0)
您需要将表的两个副本连接在一起
CREATE TABLE #mytable
(
id INT,
description VARCHAR(50),
code VARCHAR(10),
unitvalue INT NULL,
short VARCHAR(10)
)
INSERT INTO #mytable
(
id,
description,
code,
unitvalue,
short
)
VALUES
(1, 'awesome product DG' , 'CODEB14' , null ,'BT'),
(2, 'awesome product' , 'CODE14' , 5005 ,'NOBT'),
(3, 'product less awe BGO' , 'CODEB15' , null ,'BT'),
(4, 'product less awe' , 'CODE15' , 5006 ,'NOBT');
SELECT a.description, a.code, b.description, b.code, b.short, b.unitvalue, a.description, a.short
FROM #myTable a
LEFT OUTER JOIN #myTable b ON a.description LIKE b.description + '%'
AND b.short != 'BT'
WHERE a.short = 'BT'
但是,这有很多假设,即每行只有一个这样的项目,您没有类似名称的产品,而“ like”会混淆这两个项目。如果有任何种类的音量,加入“ like”也将很慢。因此,尽管这适用于这些琐碎的示例数据,但我不确定我是否建议您实际使用它。
在我看来,这些数据不应全部都放在同一张表中。您应该有一个带有BT条目的表,另一个带有NOBT条目和BT表的外键的表。也许?尚不清楚数据代表什么,但可能会为您指明正确的方向。
答案 2 :(得分:0)
您可以使用如下代码。您需要使用表别名(下面的T1和T2)来帮助匹配列。这是一个相关的子查询,假设存在完全匹配的一个。我会指出,LIKE
会导致问题,如果您有多个匹配的产品,则会返回多行。
select (
select unit_value
from my_table T2
WHERE T2.description like '%awesome product%'
AND T2.short = 'NOBT'
)
from my_table T1
where T1.short= 'BT' AND T1.description LIKE '%awesome product%'