【问题标题】:Add Values to dropdownlist on the basis of SQL Query在 SQL Query 的基础上向下拉列表添加值
【发布时间】:2016-08-08 07:15:52
【问题描述】:

我有一个dropdownlist,其值由一个查询绑定,该查询是

select emp_card_no, 
       emp_name + '-' 
                + cast(emp_card_no as varchar) 
                + '(' 
                + datename(MM,a.dt_of_leave) 
                + ' - ' 
                + cast(year(a.dt_of_leave)as varchar)
                +')' emp_name 
from emp_mst a 
where month(a.dt_of_leave) >= month(getdate())-1  
  and year(a.dt_of_leave) = 
        case when month(getdate())=1 then year(getdate())-1 
             else year(getdate()) 
        end
order by emp_name 

其结果看起来像这样。

[![SQL 输出][1]][1]

现在我想要的是,在Emp_name 列中,我想根据下面的查询在(April - 2016) 之后添加文本为PROCESSPENDING

select emp_mkey, * from emp_mon_day
where emp_mkey = 312
 and month = 4
 and year = 2016

如果查询返回任何结果,则 PROCESS 否则 PENDING

注意

第一个查询列Emp_card_noemp_mon_day 表中的Emp_mkey

另见绑定下拉列表的代码

protected void funfillEmployee()
{
    DataTable DtCombo = new DataTable();
    string strdate = System.DateTime.Now.ToString("dd/MM/yyyy");

    DtCombo = ObjPriDal.ExecuteDataTable("select emp_card_no, emp_name + '-' + cast(emp_card_no as varchar)+ '(' + datename(MM,a.dt_of_leave)  + ' - ' + cast(year(a.dt_of_leave)as varchar)+')' emp_name  " +
                         "  from emp_mst a where month(a.dt_of_leave) >= month(getdate())-1  and  year(a.dt_of_leave)= case " +
                         "   when  month(getdate())=1 then year(getdate())-1 else year(getdate()) end order by emp_name ");

    cmbEmp_Name.DataTextField = "emp_name";
    cmbEmp_Name.DataValueField = "emp_card_no";
    cmbEmp_Name.DataSource = DtCombo;
    cmbEmp_Name.DataBind();
    cmbEmp_Name.Items.Insert(0, new ListItem("--Select--", "0"));
    DtCombo.Clear();
}

让我知道该怎么做。

我正在使用SQL-server-2005

【问题讨论】:

    标签: sql asp.net sql-server-2005 drop-down-menu


    【解决方案1】:

    试试这样的:

    select a.emp_card_no, 
           a.emp_name + '-' 
                      + cast(a.emp_card_no as varchar) 
                      + '(' 
                      + datename(MM,a.dt_of_leave) 
                      + ' - ' 
                      + cast(year(a.dt_of_leave)as varchar)
                      +') '
                      +                
                        case when m.emp_mkey IS NULL 
                             then 'PENDING' 
                             else 'PROCESS' 
                        end                  
                      emp_name 
    from emp_mst a 
    LEFT JOIN emp_mon_day m ON m.Emp_mkey = a.Emp_card_no 
                            AND m.month = month(a.dt_of_leave) 
                            AND  m.year = year(a.dt_of_leave)
    where month(a.dt_of_leave) >= month(getdate())-1  
      and year(a.dt_of_leave) = 
            case when month(getdate())=1 then year(getdate())-1 
                 else year(getdate()) 
            end
    order by emp_name 
    

    但你可能已经适应了那部分

    AND m.month = month(a.dt_of_leave) AND  m.year = year(a.dt_of_leave)
    

    因为月份和年份是保留字,我怀疑您将列命名为这样,但您没有指定其他名称

    【讨论】:

    • @coder 啊,是的,您显然错过了告诉我们您在两张表之间存在一对多的关系。我以为是1-1。换句话说,您的emp_mon_day 表中可以有重复的Emp_mkey,对吧?
    • @coder 好的,然后是 2 个解决方案,因为它仍然太模糊,无法给您一个完美的答案:1. 如果您可以匹配 2 个表中的日期(年+月),则将其添加到 @987654325 @ 子句:LEFT JOIN emp_mon_day m ON m.Emp_mkey = a.Emp_card_no AND m.month = month(a.dt_of_leave) AND m.year = year(a.dt_of_leave) 2.otherwhise 我会在您的SELECT 中向您建议另一种使用NOT EXISTS 的方法...尝试1. 并提供反馈
    • 让我知道您是否想从我这边澄清您的疑问,如果您需要表格脚本和任何其他尝试。我会给你。因为我仍然不明白我必须做什么??
    • 问题是:您是否想从emp_mon_day 表中检查是否存在同一Emp_card_no 的记录AND 同一年/月,还是您只是想检查是否存在来自同一个 Emp_card_no 的记录?如果 1 将 LEFT JOIN 与我之前评论中的那个相适应,如果 2 我会为您提供另一个查询
    • 是的,我想在此基础上从emp_mon_day 检查同一年/月,我的PROCESSPENDING 逻辑将起作用。让我知道是否还有其他疑问是他们的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多