【问题标题】:How to retrieve same column twice with different values of other column in same table [duplicate]如何使用同一表中其他列的不同值检索同一列两次[重复]
【发布时间】:2013-05-09 07:59:39
【问题描述】:

我有 3 个表格,如下所示:

村庄

Village_ID Village_Name

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

Aganbadi_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_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 月食(2013) 食(2014) 第1309章 1个 第1309章 2天 第1310章 1个 第1310章 2天 第1310章 3点 第1311章 3天 第1309章 1空

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

【问题讨论】:

  • 上一个问题已经回答了stackoverflow.com/questions/16423883/…
  • Sahu,您评论说它对于其中一个答案工作正常。那么,为什么要再次发布问题? साहू,आपआपयहजवाबमेंसेएककेलिएठीककामकररहाकिटिप्पणीकी तो, क्यों फिर सवाल के बाद?
  • @Raj,在上一个问题中,记录仅查找月份的基础,但现在我想查找包含相同月份的年份的记录。同样在上一个问题的查询中,我用 Year 代替了 Month,但发生了错误,即“子查询返回了超过 1 个值。当子查询遵循 =,!=,,>= 或当子查询用作表达式。”

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


【解决方案1】:

试试这个:

 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) |

【讨论】:

  • 不,它不能正常工作。请给我其他解决方案
  • 什么不正确?
  • 相同的 Anganbadi_ID 显示同一个月 (1 ) 年份 (2013 年和 2014 年) 的两个不同行......我已经在上面的查询中尝试过同样的事情......先生请给我我上面要求的结果的代码。
  • 先生,请给我一个不使用 PIVOT 的解决方案因为我想在两个不同年份的基础上比较表 Anganbadi 中的所有列,我不明白如何处理它通过使用 PIVOT。
  • 我看不到任何两个具有相同的ANGANBADI_IDMONTH。这个输出有什么问题?
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 2012-11-26
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2021-10-23
  • 2017-03-14
  • 1970-01-01
相关资源
最近更新 更多