【问题标题】:sql case statement into combobox [closed]sql case语句进入组合框[关闭]
【发布时间】:2012-12-24 07:29:29
【问题描述】:

我有一个这样的 sql case 语句

select Distinct y.SupplierID,y.Name,y.AddWho , 
        "StatusDesc=CASE when  y.status='N' then 'NEW' " & _
        "when y.status='B' then 'BLACKLISTED'" & _
        "when y.status='Q' then 'QUALIFIED'" & _
        "when y.status='R' then 'REJECTED' end , " & _
        "FlowStatusDesc = CASE when  y.flowstatus='RC' then 'UNDER REVIEW'" & _
        "when y.flowstatus='PE' then 'POTENTIAL EXCLUSIVE'" & _
        "when y.flowstatus='PO' then 'POTENTIAL ORDINARY' ELSE '' end," & _
        "OrderNo=case when y.status='N' and flowstatus='' then '1'" & _
        "when y.status='N' and y.flowstatus<>'' then '2'    " & _
        "when y.status='R' and y.flowstatus='' then '3'" & _
        "when y.status='R' and y.flowstatus<>'' then '4'" & _
        "when y.status='Q' and y.flowstatus='' then '5'" & _
        "when y.status='Q' and y.flowstatus<>'' then '6'" & _
        "when y.status='B' and y.flowstatus=''  then '7'" & _
        "when y.status='B' and y.flowstatus<>'' then '8' else '9' end " & _
        "from AP_Supplier y" & _
        " left outer join SC_User u on y.addwho=u.userid " & _
        "left outer join SC_Company co on co.companycode=u.companycode " & _
        "where flowstatus is not null " & _
        "group by y.SupplierID,y.name,y.status,y.flowstatus,y.addwho " & _
        "order by orderno"

如果我可以将“新”、“合格”、“注册”和 flowstatuses 等所有案例语句条件加载到 vb.net 上的组合框中?你能给我举个例子吗?我试过这样做很长一段时间。谢谢。

【问题讨论】:

  • 您希望将这些状态的单独列表加载到组合框中吗?不是来自这个查询?
  • 我的意思是,会有 2 个组合框,每个组合框。对于状态,它将是“新”、“合格”、“黑名单”和拒绝,而对于流状态,“正在审查”、“潜在普通”和“潜在独家”。

标签: c# .net sql-server


【解决方案1】:

有很多方法可以做到这一点,第一种是从列表中填充组合框。在这种情况下,您应该有一个类,例如:

public class Status(){
    public string Symbol { get; set; } // or Id
    public string Name { get; set; }
}

然后是您的状态列表:

var ds = new List<Status>(){
    new Status { Symbol = "N", Name = "New" },
    new Status { Symbol = "Q", Name = "Qualified" },
    .... 
};

然后,您可以使用以下两个属性轻松地从此列表中填充组合框:

像这样:

YourcomboboxName.DataSource = ds;
YourcomboboxName.ValueMember = "Symbol";
YourcomboboxName.DisplayMember = "Name";

第二种方法是有一个表或临时表,包含这些值列表,如下所示:

CREATE TABLE Statuses(StatusId INT, 
                      StatusSymbol VARCHAR(2), 
                      StatusName VARCHAR(20));

INSERT INTO Statuses(StatusId, StatusSymbol, STatusName) VALUES
                    (1, 'N' , 'NEW'),
                    (2, 'B' , 'BLACKLISTED'),
                    (3, 'Q' , 'QUALIFIED'),
                    (4, 'R' , 'REJECTED'),
                    (5, 'UR', 'UNDER REVIEW'),
                    (6, 'PE', 'POTENTIAL EXCLUSIVE'),
                    (7, 'PO', 'POTENTIAL ORDINARY');

然后您可以在使用从该表读取并填充它的数据源之前以相同的方式使用它。但是此解决方案将使您的查询更容易。您可以像这样使用此表JOIN

SELECT DISTINCT 
  y.SupplierID,
  y.Name,
  y.AddWho,
  StatusDesc = s.STatusName,
  FlowStatusDesc = CASE WHEN ... END
  orderno = CASE WHEN ...
FROM AP_Supplier y
INNER JOIN statuses   s ON y.status       = s.StatusSymbol
LEFT JOIN SC_User     u ON y.addwho       = u.userid
LEFT JOIN SC_Company co ON co.companycode = u.companycode 
WHERE flowstatus IS NOT NULL
GROUP BY y.SupplierID,
         y.name,
         y.status,
         y.flowstatus,
         y.addwho
ORDER BY orderno;

请注意:这样你的表,如果可能的话,需要重构,最好去掉这些状态名称,并有一个新的表Statuses id 为外国键入第二个表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多