none
於SQL查詢字串中,從一個欄位數值判斷,取得其它不同欄位值顯示 RRS feed

  • 問題

  • 各位先進大家好:
          小弟之MS SQL資料中有一欄位值用來判斷狀態,並須根據此狀態,取得同一筆資料之不同欄位來顯示.如"VALUE"欄位值為0時,於Grid上顯示"VALUE_FALSE"欄位值(如"陰天"),"VALUE"欄位值為1時,於Grid上顯示"VALUE_TRUE"欄位值(如"晴天").請問如何於SQL查詢句中直接置換後,顯示於Grid之欄位內.
    2009年5月31日 上午 07:54

解答

  • Sorry :
        應該是
       CASE WHEN [Data.Value] = 0 THEN [Basic.cRst] ELSE [Basic.cSet] END AS 狀態
       我一開始的答案有,寫太快忘了 Case
    • 已標示為解答 阿捨 2009年5月31日 上午 09:45
    2009年5月31日 上午 09:36

所有回覆

  • 阿捨:
      Select  Case 
               When  你的天氣欄位=1 Then '晴天'
               When  你的天氣欄位=2 Then '雨天'
               When  你的天氣欄位=3 Then '陰天'
               Else 'XX天'
       End As 你可以取一個新的欄位名稱
    • 已編輯 Bill ChungMVP 2009年5月31日 上午 09:38 頭昏腦脹寫錯了
    2009年5月31日 上午 08:15
  • SQL Server 的問題可直接到 SQL Server 版問。
    你可以在 T-SQL 中使用 CASE
    例如:
    SELECT VALUE_FALSE =
       CASE VALUE
          WHEN 0 THEN '陰天'
          WHEN 1 THEN '晴天'
       END
    FROM 你的表格
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年5月31日 上午 08:15
  • 感謝二位先進指導,小弟阿笨,直接將query字串貼上,請指導!
    下列查詢句中,必須依據[監測值]資料,若為0,取得Basic.cRst欄位值,若為1(或非0),取得Basic.cSet欄位值,再以[狀態]欄位顯示結果,因cRst及cSet欄位值為未知,故無法直接設定值,下列字串第二列會有錯誤,煩請修正指教.

    queryStr = "SELECT Basic.ViewIdx as [項次],Basic.Station as [場站], Basic.Comment as [監測信號],  Data.Value as [監測值] " & _
                        " SELECT [監測值] WHEN 0 THEN Basic.cRst ELSE Basic.cSet END as [狀態] " & _
                        " FROM Data INNER JOIN Basic ON Data.Tag=Basic.Tag " & _
                        " WHERE Basic.Station='" & TextBox1.Text & "' and Data.DateTime='" & qStr & "'" & _
                        " ORDER BY Basic.Type DESC , Basic.ViewIdx "
    2009年5月31日 上午 08:44
  • 改成這樣試試
    "SELECT Basic.ViewIdx as [項次],Basic.Station as [場站], Basic.Comment as [監測信號],  Data.Value as [監測值] ," & _
                        "  Data.Value WHEN 0 THEN Basic.cRst ELSE Basic.cSet END as [狀態] " & _
                        " FROM Data INNER JOIN Basic ON Data.Tag=Basic.Tag " & _
                        " WHERE Basic.Station='" & TextBox1.Text & "' and Data.DateTime='" & qStr & "'" & _
                        " ORDER BY Basic.Type DESC , Basic.ViewIdx "
    另外提醒,如果你是寫VB.NET程式的話
     " WHERE Basic.Station='" & TextBox1.Text & "' and Data.DateTime='" & qStr & "'"  <=最好不要用這種方法加入參數,會有SQL Injection的問題.
    關於SQLCommand類別加入參數的說明,可以參考 MSDN文件庫 [SqlCommand.Parameters 屬性]
    2009年5月31日 上午 08:57
  • Mr. Chung 您好:
        經測試後(VWD 2008 Exp. 及 SQL Server 2005), "WHEN"之語法有誤,Data.Value為"float",不知是否有問題?
    2009年5月31日 上午 09:16
  • Sorry :
        應該是
       CASE WHEN [Data.Value] = 0 THEN [Basic.cRst] ELSE [Basic.cSet] END AS 狀態
       我一開始的答案有,寫太快忘了 Case
    • 已標示為解答 阿捨 2009年5月31日 上午 09:45
    2009年5月31日 上午 09:36
  • 感謝 Mr. Chung:
         經您指點,已測試OK,不過在上述環境中"[]"需移除,請參改.
         再次感謝您!
    2009年5月31日 上午 09:47