SQL 根据条件查询到 select 一列的多个实例
SQL Query to select several instances of one column based on conditions
我要加入 3 tables:
SELECT TABLE1.FIELD1
FROM TABLE1
JOIN TABLE2 ON TABLE1.ID = TABLE2.FK
JOIN TABLE3 ON TABLE2.ID = TABLE3.FK
我想根据某些条件 select TABLE2.FIELD1
的几列,例如 TABLE2.FIELD1 WHERE TABLE2.CONDITIONI
、TABLE2.FIELD1 WHERE TABLE3.ANOTHERCONDITION
.
所以最终结果是这样的:
TABLE1.FIELD1 | TABLE2.FIELD1 BASE ON CON1 | TABLE2.FIELD1 BASED ON CON2
我不确定我是否足够清楚,如果需要,请进一步说明。
示例报告:
Id | Product | Income Quantity | Outcome Quantity
在此示例中,数量仅在第二个 table 中的一个字段中与产品 table 联合。它根据不同的条件在输出中渲染了两次,例如,收入是 header.flow == 1
的地方,而输出是 header.flow == -1
.
的地方
不确定,但您似乎应该使用 CASE
语句
select
case when <<cod1>> then
table1.field
when <<cod2>> then
table2.field
end
from your_table1
inner join your_table2 on <<condition>>
像这样
SELECT ID,
CASE WHEN flow = 1 THEN Quantity ELSE NULL END as 'Income',
CASE WHEN flow = -1 THEN Quantity ELSE NULL END as 'Outcome'
FROM Sample
只需在最后根据需要添加您的加入,并在 CASE 语句中更改您的条件
根据您的评论
I have to use group by for flow and SUM(quantity). and I'll have two columns for each product.
您可以试试这个:
SELECT s1.ID,
(SELECT SUM(Quantity) FROM SAMPLE s2 WHERE s2.ID = S1.ID AND S2.FLOW = 1) as 'Income',
(SELECT SUM(Quantity) FROM SAMPLE s2 WHERE s2.ID = S1.ID AND S2.FLOW = -1) as 'Outgoing'
FROM Sample S1
GROUP BY ID
也可以通过
实现
SELECT DISTINCT s1.ID,
(SELECT SUM(Quantity) FROM SAMPLE s2 WHERE s2.ID = S1.ID AND S2.FLOW = 1) as 'Income',
(SELECT SUM(Quantity) FROM SAMPLE s2 WHERE s2.ID = S1.ID AND S2.FLOW = -1) as 'Outgoing'
FROM Sample S1
我要加入 3 tables:
SELECT TABLE1.FIELD1
FROM TABLE1
JOIN TABLE2 ON TABLE1.ID = TABLE2.FK
JOIN TABLE3 ON TABLE2.ID = TABLE3.FK
我想根据某些条件 select TABLE2.FIELD1
的几列,例如 TABLE2.FIELD1 WHERE TABLE2.CONDITIONI
、TABLE2.FIELD1 WHERE TABLE3.ANOTHERCONDITION
.
所以最终结果是这样的:
TABLE1.FIELD1 | TABLE2.FIELD1 BASE ON CON1 | TABLE2.FIELD1 BASED ON CON2
我不确定我是否足够清楚,如果需要,请进一步说明。
示例报告:
Id | Product | Income Quantity | Outcome Quantity
在此示例中,数量仅在第二个 table 中的一个字段中与产品 table 联合。它根据不同的条件在输出中渲染了两次,例如,收入是 header.flow == 1
的地方,而输出是 header.flow == -1
.
不确定,但您似乎应该使用 CASE
语句
select
case when <<cod1>> then
table1.field
when <<cod2>> then
table2.field
end
from your_table1
inner join your_table2 on <<condition>>
像这样
SELECT ID,
CASE WHEN flow = 1 THEN Quantity ELSE NULL END as 'Income',
CASE WHEN flow = -1 THEN Quantity ELSE NULL END as 'Outcome'
FROM Sample
只需在最后根据需要添加您的加入,并在 CASE 语句中更改您的条件
根据您的评论
I have to use group by for flow and SUM(quantity). and I'll have two columns for each product.
您可以试试这个:
SELECT s1.ID,
(SELECT SUM(Quantity) FROM SAMPLE s2 WHERE s2.ID = S1.ID AND S2.FLOW = 1) as 'Income',
(SELECT SUM(Quantity) FROM SAMPLE s2 WHERE s2.ID = S1.ID AND S2.FLOW = -1) as 'Outgoing'
FROM Sample S1
GROUP BY ID
也可以通过
实现SELECT DISTINCT s1.ID,
(SELECT SUM(Quantity) FROM SAMPLE s2 WHERE s2.ID = S1.ID AND S2.FLOW = 1) as 'Income',
(SELECT SUM(Quantity) FROM SAMPLE s2 WHERE s2.ID = S1.ID AND S2.FLOW = -1) as 'Outgoing'
FROM Sample S1