如何使用同一表中其他列的不同值检索同一列两次

时间:2013-05-09 07:59:40

标签: c# asp.net sql sql-server database

我有3个表正在跟随::

Village_ID     Village_Name

446261           परसठ्ठी
446262            बम्हनी
446263           लाफिनखुर्द
446264            सोरम
446265             सिधीं

Anganbadi_Master

Anganbadi_ID     Anganbadi_Name     Village_ID
  1307            चिंगरौद             446260
  1308            चिगरौद-2           446260
  1309            बम्हनी-1            446262
  1310            बम्हनी-2            446262
  1311            बम्हनी-3            446262
  1312            लाफिनखुर्द-1         446263
  1313            लाफिनखुर्द-2         446263

Anganbadi

Anganbadi_ID   Food    Month      Year
    1179        हाँ        5        2013
    1309        हाँ        1        2013
    1309        नहीं       1        2014
    1309        हाँ        2        2013
    1310        हाँ        1        2013
    1310        हाँ        2        2013
    1310        हाँ        3        2013
    1311        नहीं       3        2013
    2032        हाँ        3        2013

现在我想在两个不同年份的基础上两次检索食物专栏,其中同一个月的不同年份必须只出现一次,如下:

Anganbadi_ID    Month   food(2013)  food(2014)
1309             1          हाँ       नहीं
1309             2          हाँ       NULL
1310             1          हाँ       NULL
1310             2          हाँ       NULL
1310             3          हाँ       NULL
1311             3          नहीं      NULL

但是,当我尝试这段代码时

SELECT DISTINCT Anganbadi.Anganbadi_ID
      , Anganbadi.Month
      , Anganbadi.Food  AS food2013
      , NULL            AS Food2014
  FROM Anganbadi
       INNER JOIN Anganbadi_Master ON  Anganbadi.Anganbadi_ID = Anganbadi_Master.Anganbadi_ID
       INNER JOIN Village ON  Anganbadi_Master.Village_ID = Village.Village_ID
 WHERE  (Anganbadi.Year = 2013)
   AND (Anganbadi_Master.Village_ID = 446262)
UNION ALL
SELECT Anganbadi_1.Anganbadi_ID
      , Anganbadi_1.Month
      , NULL                        AS food2013
      , Anganbadi_1.Food            AS Food2014
  FROM Anganbadi                    AS Anganbadi_1
       INNER JOIN Anganbadi_Master  AS Anganbadi_Master_1 ON  Anganbadi_1.Anganbadi_ID = 
            Anganbadi_Master_1.Anganbadi_ID
       INNER JOIN Village           AS Village_1 ON  Anganbadi_Master_1.Village_ID = 
            Village_1.Village_ID
 WHERE  (Anganbadi_1.Year = 2014)
   AND (Anganbadi_Master_1.Village_ID = 446262)


它显示以下结果::

 
Anganbadi_ID    Month   food(2013)  food(2014)
1309             1          हाँ       NULL
1309             2          हाँ       NULL
1310             1          हाँ       NULL
1310             2          हाँ       NULL
1310             3          हाँ       NULL
1311             3          नहीं      NULL
1309             1          NULL      नहीं

此处Anganbadi_ID 1309显示同一个月(1)(2013年和2014年)的两个不同行

1 个答案:

答案 0 :(得分:0)

试试这个:

 SELECT *
  FROM Anganbadi
  PIVOT
  (
    MAX(food)
    FOR [year] IN([2013],[2014])
   ) AS p

SQL Fiddle

    | ANGANBADI_ID | MONTH | 2013 |   2014 |
----------------------------------------
|         1309 |     1 |  हाँ |   नहीं |
|         1310 |     1 |  हाँ | (null) |
|         1309 |     2 |  हाँ | (null) |
|         1310 |     2 |  हाँ | (null) |
|         1310 |     3 |  हाँ | (null) |
|         1311 |     3 | नहीं | (null) |
|         2032 |     3 |  हाँ | (null) |
|         1179 |     5 |  हाँ | (null) |