如何在子句

时间:2016-10-15 16:22:21

标签: sql-server sql-server-2012

大家好,我有任何方式可以在子句中使用多个值作为 column_name介于0和100或200和300之间 任何帮助,将不胜感激 这是我的查询SELECT CASE WHEN ISNUMERIC(value_text) = 1 THEN CAST(value_text AS INT) ELSE -1 END) between 0 and 100 我只想在子句

之间附加多个值

这是完整查询

SELECT ROW_NUMBER() OVER
  (
        order by Vendor_PrimaryInfo.Vendor_ID asc
  )AS RowNumber
  , Unit_Table.Unit_title, Vendor_Base_Price.Base_Price, Vendor_Base_Price.showprice, Category_Table.Title, Vendor_Registration.Business_Name, 
                     Vendor_PrimaryInfo.Street_Address, Vendor_PrimaryInfo.Locality, Vendor_PrimaryInfo.Nearest_Landmark, Vendor_PrimaryInfo.City, Vendor_PrimaryInfo.State, 
                     Vendor_PrimaryInfo.Country, Vendor_PrimaryInfo.PostalCode, Vendor_PrimaryInfo.Latitude, Vendor_PrimaryInfo.Longitude, Vendor_PrimaryInfo.ImageUrl, 
                     Vendor_PrimaryInfo.ContactNo, Vendor_PrimaryInfo.Email,Vendor_PrimaryInfo.Vendor_ID


  FROM  Unit_Table INNER JOIN
                     Vendor_Base_Price ON Unit_Table.Unit_ID = Vendor_Base_Price.Unit_ID INNER JOIN
                     Vendor_PrimaryInfo ON Vendor_Base_Price.Vendor_ID = Vendor_PrimaryInfo.Vendor_ID INNER JOIN
                     Vendor_Registration ON Vendor_Base_Price.Vendor_ID = Vendor_Registration.Vendor_ID AND 
                     Vendor_PrimaryInfo.Vendor_ID = Vendor_Registration.Vendor_ID INNER JOIN
                     Category_Table ON Vendor_Registration.Category_ID = Category_Table.Category_ID
                     LEFT JOIN
                     Vendor_Value_Table ON Vendor_Registration.Vendor_ID = Vendor_Value_Table.Vendor_ID LEFT JOIN
                     Feature_Table ON Vendor_Value_Table.Feature_ID = Feature_Table.Feature_ID

                 where Vendor_Registration.Category_ID=5 and Vendor_PrimaryInfo.City='City'
                  AND(
  value_text in('Dhol Wala$Shahnai Wala') 
  or 
 (SELECT CASE WHEN ISNUMERIC(value_text) = 1 THEN CAST(value_text AS INT) ELSE -1 END) between  0 and 100 
)

1 个答案:

答案 0 :(得分:0)

您可以使用AND/OR逻辑

执行此操作
value_text NOT LIKE '%[^0-9]%' and 
(
value_text between 0 and 100
Or 
value_text between 101 and 200
)

如果您不想重复列名称,请在表值构造函数中对范围进行框架并与表格连接

SELECT Row_number()
         OVER (
           ORDER BY Vendor_PrimaryInfo.Vendor_ID ASC )AS RowNumber,
       Unit_Table.Unit_title,
       Vendor_Base_Price.Base_Price,
       Vendor_Base_Price.showprice,
       Category_Table.Title,
       Vendor_Registration.Business_Name,
       Vendor_PrimaryInfo.Street_Address,
       Vendor_PrimaryInfo.Locality,
       Vendor_PrimaryInfo.Nearest_Landmark,
       Vendor_PrimaryInfo.City,
       Vendor_PrimaryInfo.State,
       Vendor_PrimaryInfo.Country,
       Vendor_PrimaryInfo.PostalCode,
       Vendor_PrimaryInfo.Latitude,
       Vendor_PrimaryInfo.Longitude,
       Vendor_PrimaryInfo.ImageUrl,
       Vendor_PrimaryInfo.ContactNo,
       Vendor_PrimaryInfo.Email,
       Vendor_PrimaryInfo.Vendor_ID
FROM   Unit_Table
       INNER JOIN Vendor_Base_Price
               ON Unit_Table.Unit_ID = Vendor_Base_Price.Unit_ID
       INNER JOIN Vendor_PrimaryInfo
               ON Vendor_Base_Price.Vendor_ID = Vendor_PrimaryInfo.Vendor_ID
       INNER JOIN Vendor_Registration
               ON Vendor_Base_Price.Vendor_ID = Vendor_Registration.Vendor_ID
                  AND Vendor_PrimaryInfo.Vendor_ID = Vendor_Registration.Vendor_ID
       INNER JOIN Category_Table
               ON Vendor_Registration.Category_ID = Category_Table.Category_ID
       LEFT JOIN Vendor_Value_Table
              ON Vendor_Registration.Vendor_ID = Vendor_Value_Table.Vendor_ID
       LEFT JOIN Feature_Table
              ON Vendor_Value_Table.Feature_ID = Feature_Table.Feature_ID
       JOIN (VALUES (0, 100),
                    (101, 200),
                    (201, 300)) tc (st, ed)
         ON Try_cast(value_text AS INT) BETWEEN st AND ed
             OR Try_cast(value_text AS VARCHAR(100)) = 'Dhol Wala$Shahnai Wala'
WHERE  Vendor_Registration.Category_ID = 5
       AND Vendor_PrimaryInfo.City = 'City' 

注意:您在一个列中存储了两个不同的信息,当您想要提取这样的数据时会导致很多痛苦。考虑更改表结构