如何在同一张表中使用不同条件检索相同的列?

6
这是我的表格:
Anganbadi_ID               Food     Month
-------------------------------------------    
1165                       हाँ         1
1165                       हाँ         2
1165                       हाँ         4
1168                       हाँ         4
2032                       नहीं        4
2218                       नहीं        4
2219                       हाँ         4
2358                       नहीं        4
2546                        हाँ        10 

有四个列Anganbadi_ID,Food,Month,Year,我想要基于两个不同的月份值两次比较Food列。

例如,如果我选择第一个食品(食品-1)列的月份=4和第二个食品(食品-2)列的月份=10,则应该如下:

Anganbadi_ID            Food-1     Food-2    
------------------------------------------    
1165                       हाँ          NULL 
1168                       हाँ          NULL 
2032                       नहीं        NULL 
2218                       नहीं        NULL 
2219                       हाँ          NULL 
2358                       नहीं        NULL 
2546                     NULL        हाँ 

当我尝试运行这段代码时
SELECT     
   Anganbadi_ID, Food,
   (SELECT Food
    FROM Anganbadi AS Anganbadi_2
    WHERE (Anganbadi_1.Anganbadi_ID = Anganbadi_ID) 
      AND (Anganbadi_1.Month = 10)
   ) AS 'Food(2)'
FROM Anganbadi AS Anganbadi_1
WHERE (Month = 4)

它显示以下结果:
Anganbadi_ID              Food-1     Food-2    
--------------------------------------------
1165                       हाँ          NULL 
1168                       हाँ          NULL 
2032                       नहीं        NULL 
2218                       नहीं        NULL 
2219                       हाँ          NULL 
2358                       नहीं        NULL 

请尽快帮我......


2
嗨,大家好,不确定为什么你们这么快就把这个问题标记为错误,我认为有三个错误的答案,但是很明显这个人的英语是第二(或更低)语言,并且刚开始学习。是的,这个问题之前已经被问过了。 - Ian P
5个回答

12
SELECT DISTINCT Anganbadi_ID,

(SELECT Food 
 FROM Anganbadi 
 WHERE      (Anganbadi_ID = A.Anganbadi_ID) 
    AND (Month = 4)) AS Food1,

(SELECT Food 
 FROM Anganbadi 
 WHERE      (Anganbadi_ID = A.Anganbadi_ID) 
    AND (Month = 10)) AS Food2

FROM Anganbadi AS A 
WHERE A.Month = 10 OR A.Month = 4

SQL Fiddle


它显示错误“子查询返回多个行”,为什么? - Wiguna R

1
关键在于ID的全外连接,每个子查询中的条件可以是任何内容,全外连接将为您提供一个匹配ID的行,并在不匹配的列中使用对应的null值。如果您想要所有结果,即使在两个月份中都没有满足条件的食物,则在其中一个子查询中使用AllFoodsTable选择ID进行左连接。
SELECT Food1, Food2, ID
FROM (
  SELECT Food1, ID
  FROM MyTable
  WHERE Month = 4
) Con1
FULL OUTER JOIN (
  SELECT Food2, ID
  FROM MyTable
  WHERE Month = 10
) Con2
ON Con1.ID = Con2.ID

1
SELECT Anganbadi_ID, Food as food1, null as Food2
where Month = 4

UNION ALL

SELECT Anganbadi_ID, null as food1, food as Food2
where Month = 10

3
为什么会有负票?这个回答完全符合那个人的问题! - CathalMF

0
SELECT 
Food
DISTINCT Anganbadi_ID,

(SELECT Food 
 FROM Anganbadi 
 WHERE      (Anganbadi_ID = A.Anganbadi_ID) 
    AND (Month = 4)) AS Food1,

FROM Anganbadi AS A 
WHERE A.Month = 10 OR A.Month = 4

5
尽管这段代码可能解决问题,但是包括解释真的有助于提高您的帖子质量。请记住,您正在回答未来读者的问题,而那些人可能不知道您提出代码建议的原因。 - Athul Nath

0
SELECT DISTINCT Anganbadi_ID
,(SELECT     Food
FROM          Anganbadi AS Anganbadi_2
WHERE      (Anganbadi_1.Anganbadi_ID = Anganbadi_ID) AND (Month = 4)) AS 'Food(4)'
,(SELECT     Food
FROM          Anganbadi AS Anganbadi_2
WHERE      (Anganbadi_1.Anganbadi_ID = Anganbadi_ID) AND (Month = 10)) AS 'Food(10)'

FROM         Anganbadi AS Anganbadi_1

SQL-Fiddle

SQL-Fiddle

是一个在线 SQL 编辑器,它允许开发人员创建、调试和共享 SQL 数据库查询。通过 SQL-Fiddle,用户可以在不同的数据库平台之间进行比较和测试,如 MySQL、PostgreSQL、Oracle 和 SQLite。这个工具对于学习 SQL 或者需要快速测试查询的程序员来说非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接