【问题标题】:Query Multiple Colums from the same field in the same Table In Two different Condition在两个不同的条件下从同一个表中的同一字段查询多个列
【发布时间】:2015-01-19 16:28:07
【问题描述】:

这个 tblName 表有 4 列 {Date}、{Status}、{Meal}、{Type} 我想在侧面子查询中使用条件来显示在不同的列中

Select Date, Status, Meal
    (Select Type as Special
     from tblName
     where Type In ('SSS','MMM')),
    (Select Type as Normal
     from tblName
     where Type Not IN ('SSS','MMM'))
From tblName

我收到错误消息

Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

【问题讨论】:

  • 你能给我们提供一个 sqlfiddle 例子和想要的结果吗?针对您的问题:在您的桌子上运行 Select Type as Special from tblName where Type In ('SSS','MMM')Select Type as Normal from tblName where Type Not IN ('SSS','MMM') 并查看返回的结果列表,当您在 select from 列表中使用时,该列表是不允许的。
  • 我会尽力解释,抱歉这有点复杂,因为我是新手。我想要的结果是新名称中的新表将列“类型”分隔为不同结果中的特殊和正常。有什么办法吗?
  • 在“类型”列中有许多不同的值,我想创建一个新列,其中只有“SSS”和“MMM”值以及不在“SSS”和“MMM”中的其他值将存储在“正常”列中
  • Type 是否与 DateStatusMeal 相等的行不同?请考虑一个最小的 sqlfiddle 示例,它在这里为我们节省了很多 cmets!

标签: mysql sql


【解决方案1】:

您正在做的是:对于 tblName 中的每条记录,从 tblName 中选择类型所在的所有类型('SSS','MMM')。所有这些类型都应在 tblName 的结果行中显示为一列。那当然行不通。您可以做的是为 tblName 中的每条记录选择 一个 值。例如max(type)

然而,您真正想要的似乎只是在类型为“SSS”或“MMM”时显示“特殊”,否则显示“正常”?

Select Date, Status, Meal,
  case when Type In ('SSS','MMM') then 'special' als 'normal' end as kind
From tblName;

或者在两个单独的列中显示类型?

Select Date, Status, Meal,
  case when Type In ('SSS','MMM') then Type end as Special,
  case when Type Not In ('SSS','MMM') then Type end as Normal
From tblName;

【讨论】:

    【解决方案2】:

    可能是这样的:

    Select t1.Date, t1.Status, t1.Meal
        (t2.Type as Special),
        (t3.Type as Normal )
    From tblName t1 LEFT JOIN
    tblName t2
    ON t1.ID=t2.ID
    LEFT JOIN 
    tblName t3
    ON t1.ID=t3.ID
    where t2.Type Not In ('SSS','MMM') 
    OR t3.Type In ('SSS','MMM') 
    

    条件聚合

    Select Date, Status, Meal
        (case when Type IN ('SSS','MMM') then Type else null end case) 
         )Type as Special,
       (case when Type NOT IN ('SSS','MMM') then Type else null end case) 
         )Type as Normal
    From tblName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      相关资源
      最近更新 更多