【问题标题】:How to get Sql Record with out any reference on given example如何在没有给定示例的任何参考的情况下获取 Sql Record
【发布时间】:2015-09-30 12:41:23
【问题描述】:

我有两个表作为表 1 和表 2 作为

我想要一个 table3 结构

我在上面两个表之间没有任何参考。

1.可以单选语句吗?

或者

2.为此需要循环。

我试过的是

    select E.EmpID,E.FName,E.LName,C.CityName,E.Salary,DOJ,
    case
    when E.Salary > 0 and E.Salary < 30001 then 'Trainee'
    when E.Salary > 30001 and E.Salary < 60001 then 'Jr. Developer'
    when E.Salary > 60001 and E.Salary < 150001 then 'Sr. Developer'
    when E.Salary > 150001 and E.Salary < 180001 then 'Project Lead'
    when E.Salary > 180001 and E.Salary < 250001 then 'Project Manager'
    else '' end  as Designation 
    from Emp_Master as E inner join City_Master as C
    on E.CityID = C.CityId 

我认为这是完全错误的

请回答我提供示例

【问题讨论】:

  • 请适当地标记您的问题。您使用的是 MySQL 还是 SQL Server?
  • 如果可以单选的话,可以在第一个表中划分Salary。
  • @PeterRing 你能举个例子吗
  • 您遇到的问题是数据库设计不当。您不应该在一个字段中存储多个值,您现在正在对薪水范围进行此操作。如果将其拆分为单独的字段(SalaryFrom、SalaryTo),那么查询结果会简单得多。

标签: sql-server sql-server-2008 stored-procedures sql-server-2005


【解决方案1】:

您必须将字符串转换为两个 VARCHAR 才能获得所需的 JOIN:

SELECT table2.EmpId, table2
    .FName, table2.LName, 
    table2.CityID, table2.
    DOJ, table2.salary, 
    table1.Designation
FROM table2
INNER JOIN table1 ON table2.
    salary BETWEEN CAST(LEFT(
                    table1.salary, 
                    CHARINDEX('>', 
                        table1.salary
                    ) - 1) AS INT)
        AND CAST(RIGHT(table1.
                    salary, LEN(
                        table1.salary
                    ) - CHARINDEX('>'
                        , table1.
                        salary)) AS INT
            );

【讨论】:

    【解决方案2】:

    您应该修复您的第一张表,使其包含最低和最高工资。将规则作为字符串放入 SQL 中效果不佳。

    一旦您做出此更改,您就可以通过多种方式处理查询,例如相关子查询:

    select t2.*,
           (select t1.designation
            from table1 t1
            where t2.salary between minsalary and maxsalary
           ) as designation
    from table2 t2;
    

    【讨论】:

    • 我应该如何在声明之间获得最低和最高工资?需要单个查询
    • @MiteshJain 。 . .您应该针对您的问题正确构建数据。用字符串来表示范围是个坏主意。
    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2016-07-24
    相关资源
    最近更新 更多