【问题标题】:SQL- Selecting Columns based on Date and Batch NumberSQL-根据日期和批号选择列
【发布时间】:2013-06-13 17:51:29
【问题描述】:

我很接近,现在我只是遇到了这段代码的问题。它说我需要在某处添加存在?感谢您的帮助!

SELECT (SELECT UA#SacmiDataLog_2013.NS_Inlet_T
                  , UA#SacmiDataLog_2013.NSFlowRate
                  , UA#SacmiDataLog_2013.NSHeaterTank
                  , UA#SacmiDataLog_2013.NS_Outlet_T
                  , UA#SacmiDataLog_2013.NSTrPrAvg
                  , UA#SacmiDataLog_2013.NSPump1
                  , UA#SacmiDataLog_2013.NSPump2
                  , UA#SacmiDataLog_2013.NS_Visc
                  , UA#SacmiDataLog_2013.NS_Burner_B
             WHERE
               UA#SacmiDataLog_2013.NSHeatBatch = 'G23169') AS expr1
          , (SELECT UA#SacmiDataLog_2013.OS_Inlet_T
                  , UA#SacmiDataLog_2013.OS_Outlet_T
                  , UA#SacmiDataLog_2013.OS_Burner_B
                  , UA#SacmiDataLog_2013.OSViscosity
                  , UA#SacmiDataLog_2013.OSHeaterTank
                  , UA#SacmiDataLog_2013.OSPump1
                  , UA#SacmiDataLog_2013.OSPump2
                  , UA#SacmiDataLog_2013.OSTrPrAvg
             WHERE
               UA#SacmiDataLog_2013.OSHeatBatch = 'G23169') AS expr2

来自 dbo.UA#SacmiDataLog_2013

【问题讨论】:

  • 所以可以说 G22166 是在 2013 年 1 月 1 日在新的一侧制作的。在旧的一面 G22166 于 2013 年 4 月 1 日再次制造。有没有办法让我选择 2013 年 4 月 1 日的日期并且只显示旧端数据?
  • 我很困惑,因为您说可以在双方生产批次,但您说您只需要从生产批次的一侧选择结果。这将有助于更好地查看表结构。
  • 查看您最近的评论,鉴于您共享的信息,我的回答是肯定的:仅从 OSHeatBatch 列中选择。您的 WHERE 子句正在查看 NS 和 OS 列。但同样,我打赌我没有足够的信息来正确回答这个问题。编辑:或者您是说您只想查看最近输入的批次?
  • 它不会让我添加图像,所以让我尝试编辑它以使其更易于理解
  • 您当然可以在此处添加图片,但请告诉您,如果您按照现在的方式添加查询以及您收到的结果,这将非常有帮助。您可以将其添加为文本(在编辑器中有一个用于格式化为代码的按钮)。然后您可以更轻松地解释您希望看到的结果。

标签: sql sql-server select case


【解决方案1】:

那么,这样做,我希望这会有所帮助:

SELECT  * FROM( 
    SELECT NSField1 as DataColumnNameSame1,NSField2 as DataColumnNameSame2 FROM SAMETABLE AS NS WHERE NS.BATCH='111111' AND RUNDATE BETWEEN '1/14/13' AND '1/16/13' 

UNION ALL

    SELECT OSField1 as DataColumnNameSame1,OSField2 as DataColumnNameSame2 FROM SAMETABLE AS NS WHERE OS.BATCH='111111' AND RUNDATE BETWEEN '1/14/13' AND '1/16/13' 

) AS DATA 
    --WHERE CRITERIA IF NECESSARY IN THIS LEVEL TOO, ONCE AGAIN YOU CAN FILTER FROM HERE ALSO IF NEEDED. HOPE THIS HELPS.

【讨论】:

    【解决方案2】:

    你试过这样吗:

    where (NSHeatBatch= 'G22166' or OSHeatBatch= 'G22166') 
    and RunDate between '1/14/13' and '1/16/13'
    

    很多时候,您的大括号对于定义查询非常重要。让我们试试吧……!

    【讨论】:

    • 这有帮助,但它也允许显示该行中的所有值。假设用户不知道批次是在新端还是旧端,他们只知道它是在两个日期之间制作的。如果 NS 值和 OS 值都出现,他们如何制作图表?
    • 然后,您必须在这两个条件之间放置一个 OR 运算符。因此,无论是批次匹配还是日期之间,两者都会出现。否则,我现在感觉你已经将你的桌子分成了 2 个新面和旧面。然后,您可以使用两个表的条​​件从两个表中查询并使用 UNION 检索数据。
    • 我没有创建新表的权限。 if else 或 case 语句会起作用吗?
    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多