【问题标题】:Text between SQL unions in Dropdownlist - ASP.net c#下拉列表中 SQL 联合之间的文本 - ASP.net c#
【发布时间】:2017-01-12 13:38:47
【问题描述】:

我有一个 SQL 查询,它带回最重要的员工,应该出现在下拉列表的顶部,然后是下面的所有其他员工。

查询是使用联合构建的,以将两个查询收集在一起。

我想在下拉列表顶部放置文本,并在联合之间放置文本。这可能吗?

E.G “Preferred Staff Members”作为最高层,“All Other Staff members”将两个工会分开

select DISTINCT e.EMPLOY_REF, e.FORENAME + ' ' + e.SURNAME as Name
from EMPLOYEE_TABLE e

where e.ID = @ID
and e.DATE_LEFT IS NULL or e.DATE_LEFT > GETDATE()

UNION ALL

select DISTINCT e.EMPLOY_REF, e.FORENAME + ' ' + e.SURNAME as Name
from EMPLOYEE_TABLE e
where e.DATE_LEFT IS NULL or e.DATE_LEFT > GETDATE()
ORDER BY Name    

【问题讨论】:

  • 考虑使用两个下拉菜单。这可能是基于意见的,IMO 这不是好的用户界面设计实践。它还需要额外的输入验证逻辑,因为您不希望用户能够实际选择“首选员工”的值。
  • 您最好执行两个查询,然后在代码层中添加其他列表项,因为它是特定于显示而不是数据的内容。想象一下在其他地方重用该查询,突然间你有了额外的非数据数据

标签: c# sql asp.net dropdown union-all


【解决方案1】:

您最好的选择可能是在每个查询中包含某种排序顺序字段。也许是一个标识符,例如标记他们首选的 astrick。

-- Preferred Employees
SELECT '* ' + NameInfo, 1
FROM Employees
WHERE YaddaYadda

UNION

-- Normal Employees
SELECT NameInfo, 2
FROM Employees
WHERE YaddaYadda

然后您可以在代码中使用排序依据,先按排序顺序,然后按名称。

【讨论】:

    【解决方案2】:

    你可以试试关注

    SELECT 0, 'Preferred Staff Members' 
    UNION ALL
    select DISTINCT e.EMPLOY_REF, e.FORENAME + ' ' + e.SURNAME as Name
    from EMPLOYEE_TABLE e
    
    where e.ID = @ID
    and e.DATE_LEFT IS NULL or e.DATE_LEFT > GETDATE()
    
    UNION ALL
    
    SELECT -1, 'All Other Staff members' 
    UNION ALL
    
    
    select DISTINCT e.EMPLOY_REF, e.FORENAME + ' ' + e.SURNAME as Name
    from EMPLOYEE_TABLE e
    where e.DATE_LEFT IS NULL or e.DATE_LEFT > GETDATE()
    ORDER BY Name
    

    然后您可以轻松识别(0 或 -1)选择了哪个选项

    【讨论】:

      【解决方案3】:

      您可以在两者之间添加一个虚拟选择

      SELECT 'Name 1' AS A, 1 AS sortOrder
      UNION ALL
      SELECT '----' AS B, 2 AS sortOrder
      UNION ALL
      SELECT 'Name 2' AS C, 3 AS sortOrder
      ORDER BY sortOrder, A
      

      在你的情况下,这看起来像这样

      SELECT DISTINCT e.EMPLOY_REF, e.FORENAME + ' ' + e.SURNAME as Name, 1 AS sortOrderFROM EMPLOYEE_TABLE e
      UNION ALL
      SELECT '----', '----' AS B, 2 AS sortOrder
      UNION ALL
      SELECT DISTINCT e.EMPLOY_REF, e.FORENAME + ' ' + e.SURNAME as Name, 3 AS sortOrderFROM EMPLOYEE_TABLE e
      ORDER BY sortOrder, Name
      

      【讨论】:

      • 不过,在这种情况下,排序会将'-----'移到顶部,而不是将其保持在更正位置
      • 更新了我的答案,您可以添加一个额外的列用于名称的排序。
      猜你喜欢
      • 2014-10-23
      • 2016-04-13
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 2023-03-30
      • 2013-09-04
      • 1970-01-01
      相关资源
      最近更新 更多