Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 需要sql server中的帮助查询吗_Sql Server_Sql Server 2008_Sql Server 2012 - Fatal编程技术网

Sql server 需要sql server中的帮助查询吗

Sql server 需要sql server中的帮助查询吗,sql-server,sql-server-2008,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2012,我有两张桌子。环境管理计划: CREATE TABLE dbo.emp ( empid INT NULL, deptid INT NULL, doj DATE NULL, loc VARCHAR(50) NULL, [status] INT NULL, [guid] INT NULL, locid INT ) INSERT INTO emp (empid, deptid, doj, loc, [status], [guid], locid)

我有两张桌子。环境管理计划:

CREATE TABLE dbo.emp (
    empid INT NULL,
    deptid INT NULL,
    doj DATE NULL,
    loc VARCHAR(50) NULL,
    [status] INT NULL,
    [guid] INT NULL,
    locid INT
)
INSERT INTO emp (empid, deptid, doj, loc, [status], [guid], locid)
VALUES
    (1, 10, '2013-09-25', 'hyd', 5, 10, 4),
    (1, 10, '2014-03-25', 'che', 5, 11, 1),
    (1, 10, '2014-04-09', 'pune', 5, 12, 2),
    (1, 10, '2015-01-22', 'pune', 5, 13, 2),
    (2, 20, '2015-12-13', 'beng', 5, 14, 3),
    (2, 20, '2014-12-12', 'chen', 5, 15, 2),
    (2, 20, '2010-10-15', 'beng', 5, 16, 3),
    (2, 20, '2010-10-15', 'beng', 4, 17, 3),
    (3, 30, '2011-11-15', 'beng', 5, 18, 3),
    (4, 40, '2010-11-15', 'chen', 5, 19, 1),
    (4, 40, '2010-11-15', 'beng', 5, 20, 3),
    (4, 40, '2009-11-15', 'beng', 5, 21, 3),
    (5, 50, '2010-12-14', 'beng', 5, 22, 3)
empref:

CREATE TABLE dbo.empref (
    empid INT NULL,
    deptid INT NULL,
    startdate DATE NULL,
    [status] INT NULL,
    [guid] INT NULL,
    checkid INT NULL
)
INSERT INTO empref (empid, deptid, startdate, [status], [guid], checkid)
VALUES
    (1, 10, '2013-10-02', 2, 1, 1),
    (1, 10, '2014-04-09', 2, 2, 2),
    (1, 10, '2015-12-09', 1, 3, 3),
    (1, 10, '2015-01-30', 2, 4, 4),
    (2, 20, '2015-12-14', 2, 2, 5),
    (2, 20, '2015-12-15', 2, 3, 6),
    (3, 30, '2011-11-15', 2, 3, 7),
    (3, 30, '2011-11-16', 2, 5, 8),
    (4, 40, '2010-11-17', 2, 6, 9),
    (5, 50, '2010-11-15', 2, 7, 9),
    (5, 50, '2010-11-15', 2, 8, 10)

两个表都有公共列EMPID+DEPTID,我们需要考虑EMP表状态=5相关记录,与EPREFF表状态=2相关记录和EMP表DOJ比较,我担心您的“文本墙”问题有点太多了。也许你应该把你的问题浓缩一点?考虑到这个链接,试着发布一个(强调最小值)。另外,试着想出一个更具表现力的标题。你当前的标题可以应用于任何被标记的问题。是的,我听不懂你的问题。你能不能把它简化成一个你不知道怎么做的技术的例子?我在上面询问的任务中更改了所需的信息。请帮助它如何编写查询以在sql Server中完成此任务。我担心你的“文本墙”问题有点太多了。也许你应该把你的问题浓缩一点?考虑到这个链接,试着发布一个(强调最小值)。另外,试着想出一个更具表现力的标题。你当前的标题可以应用于任何被标记的问题。是的,我听不懂你的问题。你能把它简化成一个你不知道如何做的技术的例子吗?我在上面询问的任务中更改了所需的信息。请帮助它如何编写查询以在sql server中实现此任务

Empid| Deptid | loc | Status | Filter | Doj |guid
1 | 10 | hyd | 5 | Update | 2013-09-25|1
1 | 10 | che | 5 | insert | 2014-03-25|2 ------min(startdate) corresponding record
1 | 10 | pune| 5 | update | 2014-04-09|11 --------mul
1 | 10 | Pune| 5 | update | 2015-01-22|4 
2 | 20 | beng| 5 | insert | 2015-12-13|14 --------------min(doj) record
2 | 20 | chen| 5 | update | 2014-12-12|2 
2 | 20 | beng| 5 | insert | 2010-10-15|16 -----this record not fall the above conditions
3 | 30 | beng| 5 | update | 2011-11-15 |3
4 | 40 |chen |5 |update |2010-11-15 |6
4 | 40 |beng |5 |insert |2010-11-15 |20
4 | 40 |beng |5 |insert |2010-11-15 |21
5 | 50 |beng |5 |update |2010-12-14 |9
SELECT e.Empid,
       ER.deptid,
       e.loc,
       e.[status],
       ER.[guid],
       e.[guid],
       CASE
           WHEN DATEDIFF(DAY, e.doj, ER.startdate) <= 0
               THEN 'INSERT'
           ELSE 'UPDATE'
       END filter,
       e.doj
FROM emp e
INNER JOIN empref ER ON e.Empid = ER.empid AND e.deptid = ER.deptid
WHERE e.[status] = 5
    AND ER.[status] = 2
    AND e.doj <= ER.startdate
    AND DATEDIFF(DAY, e.doj, ER.startdate) <= 30
SELECT *
FROM (
    SELECT e.empid,
           e.deptid,
           e.loc,
           e.status,
           CASE
               WHEN DATEDIFF(DAY, e.doj, b.startdate) < 30
                   THEN 'Update'
               ELSE 'Insert'
           END AS filter,
           e.doj,
           CASE
               WHEN DATEDIFF(DAY, e.doj, b.startdate) < 30
                   THEN b.guid
               ELSE e.guid
           END AS guid,
           CASE
               WHEN ROW_NUMBER() OVER (PARTITION BY e.guid ORDER BY e.doj DESC) = 1
                   THEN 'current'
               ELSE 'initial'
           END AS Fil,
           CASE
               WHEN ROW_NUMBER() OVER (PARTITION BY b.empid, b.deptid ORDER BY b.startdate DESC) = 1
                   THEN 'current'
               ELSE 'initial'
           END AS Fil1,
           b.startdate
    FROM emp e
    LEFT JOIN empref b ON b.empid = e.empid
        AND b.deptid = e.deptid
        AND b.startdate >= e.doj
    WHERE e.status = 5
        AND b.status = 2
        AND e.empid = 1
) a
WHERE a.fil = 'current'