【问题标题】:How to keep the specific records at first position in datalist?如何将特定记录保留在 datalist 的首位?
【发布时间】:2015-06-12 23:31:07
【问题描述】:

我在我的一个场景中使用 datalist。数据列表项目是:姓名和电子邮件。这些东西是从数据库绑定的。到目前为止,一切都很好。

概念:

用户将在注册表中注册他们的姓名和电子邮件 ID。注册完成后,数据将存储到表中(注册)。用户还需要验证他们的电子邮件 ID。已验证的电子邮件将存储到我数据库中的其他表(已验证)中。

我想要的是:

我只需要首先显示已验证的项目。之后,未经验证的项目应显示在我的数据列表中。

我尝试的是:

我使用 DataList Itemdatabound。我可以在经过验证和未经验证的项目之间进行色差。但是我一开始没有显示经过验证的记录。

我的查询如下,

Select Distinct t1.name from Registration as t1 
inner join Verification as t2 on t1.Email=t2.Email 
and t2.status='Success'

【问题讨论】:

  • 你为什么不试试 order by 条款?
  • 最好使用左外连接,然后按t2.Status排序

标签: c# sql asp.net ado.net datalist


【解决方案1】:

试试下面的代码。此处的ORDER BY T2.Status DESC 子句将确保首先检索注册和验证表中存在的那些记录。有关ORDER BY 的更多信息,请参见此处:https://msdn.microsoft.com/en-us/library/ms188385.aspx

  SELECT name, T1.Email
      FROM Registration T1
        LEFT JOIN Verification T2
          ON T1.Email = T2.Email
     ORDER BY T2.status DESC, T1.name ASC

【讨论】:

  • 尝试提供一些解释。
  • 这是一个比我的更简单,因此更好的解决方案。对不起,我自己没有考虑到:-)
【解决方案2】:

试试这个:(我已经编辑了我的答案以避免 order by 和 distinct 的错误)

SELECT name, status
FROM (
    SELECT Distinct t1.name as name, t2.status as status
    FROM Registration as t1 
    LEFT JOIN Verification as t2 ON t1.Email=t2.Email 
    ) InnerSelect
ORDER BY CASE WHEN status='Success' THEN 0 ELSE 1 END, -- This is the 'trick'...
name

【讨论】:

  • 出现错误,因为“如果指定了 SELECT DISTINCT,则 ORDER BY 项目必须出现在选择列表中”
猜你喜欢
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 2017-11-28
相关资源
最近更新 更多