如何在同一个表中使用不同条件两次检索同一列?

chi*_*ahu 6 sql database sql-server

这是我的表:

Anganbadi_ID               Food     Month
-------------------------------------------    
1165                       ???         1
1165                       ???         2
1165                       ???         4
1168                       ???         4
2032                       ????        4
2218                       ????        4
2219                       ???         4
2358                       ????        4
2546                        ???        10 
Run Code Online (Sandbox Code Playgroud)

有4列Anganbadi_ID, Food, Month, Year,我想Food根据两个不同的月份值比较两次列.

例如,如果我选择Month = 4作为第一个Food(Food-1)列,Month = 10作为第二个Food(Food-2)列,那么它应该如下::

Anganbadi_ID            Food-1     Food-2    
------------------------------------------    
1165                       ???          NULL 
1168                       ???          NULL 
2032                       ????        NULL 
2218                       ????        NULL 
2219                       ???          NULL 
2358                       ????        NULL 
2546                     NULL        ??? 
Run Code Online (Sandbox Code Playgroud)

当我尝试这段代码时

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)
Run Code Online (Sandbox Code Playgroud)

它显示以下结果::

Anganbadi_ID              Food-1     Food-2    
--------------------------------------------
1165                       ???          NULL 
1168                       ???          NULL 
2032                       ????        NULL 
2218                       ????        NULL 
2219                       ???          NULL 
2358                       ????        NULL 
Run Code Online (Sandbox Code Playgroud)

请尽快帮助我....

Nal*_*526 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
Run Code Online (Sandbox Code Playgroud)

SQL小提琴


Ian*_*n P 1

这里的关键是 ID 上的完整外连接,每个子查询中的条件可以是任何内容,完整外连接将为您提供 ID 匹配的一行,以及 ID 不匹配的相对列中的空值。如果您想要所有结果,即使任一月份的食物都不满足任何一个条件,那么可以在其中一个子查询中使用来自 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
Run Code Online (Sandbox Code Playgroud)