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'