sql - 基于 SQL 查询将值添加到下拉列表

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

我有一个 dropdownlist ,其值由查询绑定(bind)

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) 基于以下查询

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

另请参阅绑定(bind)下拉列表的代码

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

最佳答案

尝试这样的事情:

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)

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

关于sql - 基于 SQL 查询将值添加到下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661989/

相关文章:

c# - 将用户详细信息存储在字典中

c# - 加载时更改页面 css 文件

asp.net - SQL Server 2005 : Transaction Deadlock

SQL其中,从今天开始的日期加减天

sql-server-2005 - 如何从完整的 SQL 查询转变为类似 NoSQL 的查询?

sql - 自定义日期时间格式 - SQL 服务器

sql - 将合并替换为 case

mysql - 如何编写一个 SQL 查询来计算一个表的同一列中的两种类型的值?

LIKE 之间的 SQL Server 日期

asp.net - 如何在 vs2008 中关闭 JScript Intellisense?