【问题标题】:List specific value first首先列出具体值
【发布时间】:2014-07-10 11:15:29
【问题描述】:

我到处搜索,但找不到任何解决方案,我需要在下面的 sql 语句中首先列出一个特定的城市,如“纽约”,我试图放置 按情况订购 City.name_en 当“纽约”时 1 ELSE 2 END ,City.name_en 在内部sql语句中但没有工作,有什么办法可以解决这个问题吗?

SELECT * FROM (
SELECT RTRIM(Organization.name_en) as '@name','flag.png'  AS  '@flag',
    RTRIM(Country.name_en) as 'country',RTRIM(city.name_en) as 'city',Organization.id as 'OrganizationID',
    ROW_NUMBER() OVER (ORDER BY sequence_num) AS RowNum
FROM Organization 
LEFT JOIN City ON City.id = city_id
LEFT JOIN Country ON country.id = Organization.country_id
LEFT JOIN Industry ON Industry.id = Industry_id
WHERE 
 (industry_id =@industry_id OR Coalesce(@industry_id,'') = '')
AND (Organization.name_en LIKE '%' + @OrganizationName + '%' OR Coalesce(@OrganizationName,'') = '')
) AS SOD

WHERE    SOD.RowNum BETWEEN ((@PageNumber-1)*@RowsPerPage)+1
AND @RowsPerPage*(@PageNumber)

FOR XML PATH('organization'), ROOT('organizations')

【问题讨论】:

    标签: sql sql-server database sql-server-2005


    【解决方案1】:

    使用ORDER BY FIELD
    例如:-

    ORDER BY FIELD(City.name_en, 'New York', 'CA')
    

    它会给你预期的结果。

    【讨论】:

    • 这是一个 SQL Server 问题而不是 MySql!
    • 我已经尝试过了,但没有得到预期的结果,我已经在我的问题中提到了这一点
    【解决方案2】:

    使用联合

    例子

    从 country_name ='New York' 的国家中选择 country_code, country_name

    联合所有

    从 country_name != 'New York' 的国家中选择 country_code, country_name 按国家/地区名称排序

    【讨论】:

    • 在查询中,您可以看到第一个是特定类型。即“纽约”和联合都没有联合。将其插入临时表中,甚至您也可以拥有带有自动生成编号的主键。您“按 ID asc 从 tempTable order 中选择 *”。它将按照您想要的顺序。我希望它会有所帮助
    【解决方案3】:

    其实我是这样解决的:

    ROW_NUMBER() OVER (ORDER BY CASE city.name_en
               WHEN @cityName THEN 1 
               ELSE 2 END ,city.name_en) AS RowNum
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 2015-04-24
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2016-10-26
      • 2012-03-19
      相关资源
      最近更新 更多