小编oba*_*sta的帖子

同一个表中的父子关系

我有一个存储父/子记录的表,如下所示:

+-------+------------+---------+---------+------------+-----------+
|custid | custname   | deptid  | company |parentcustid| enrolled  |
+=======+============+=========+=========+============+===========+
| 7060  | Sally      |   AB1   | comp1   |  null      |     1     |
| 6953  | Ajit       |   AB7   | comp2   |  7060      |     1     |
| 6957  | Rahul      |   DE1   | comp3   |  7060      |     1     |
| 6958  | uday       |   TG6   | comp4   |  7060      |     1     |
| 6959  | john       |   HY7   | comp5   |  7060      |     1     |
| 6960 …
Run Code Online (Sandbox Code Playgroud)

join sql-server hierarchy

5
推荐指数
2
解决办法
4万
查看次数

如何使用 CTE 来比较值

我需要根据以前的记录返回 0 或 1。示例表:

DECLARE @x TABLE(ProductID INT, Failed bit, SampleDate date, LevelCode int);
INSERT @x VALUES
(101, 0, '20151201', 1),    
(101, 1, '20151205', 2),    
(101, 0, '20151206', 3),
(101, 1, '20151208', 2), 
(102, 1, '20151202', 1),
(102, 0, '20151204', 2),    
(102, 0, '20151205', 3),
(103, 0, '20160101', 1),
(103, 1, '20160102', 2),
(103, 0, '20160103', 2),
(104, 0, '20160101', 1),
(104, 0, '20160102', 2),
(104, 0, '20160103', 3);
Run Code Online (Sandbox Code Playgroud)

我们在最后一条记录上唯一关心的是LevelCode(即每个ProductID 的最后一条记录)。最后一条记录是否通过/失败无关紧要。然后,我们查看该 ProductID 的所有其他记录(因此是最后一条记录之前的所有记录),如果出现与最后一条记录相同的 LevelCode 失败,我们将 IsLastRunSameLevelAsPreviousRun 设置为 1,否则为 0:

 ProductID …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

4
推荐指数
2
解决办法
2345
查看次数

按单个字符搜索时使用 FREETEXT 还是 CONTAINS 全文搜索更好

我试图想出最有效的方法来搜索大约 130,000 条记录的集合中的记录。总而言之,我们有大约 130,000 条 Active Directory 记录。我正在构建一个在 AD 中查找用户的站点。我想在搜索框上实现 TypeAhead 功能。我可以直接在代码中查询 AD,但我正在考虑将数据转储到 SQL Server 中并进行查询。当您在文本框中键入字符时,TypeAhead 会进行搜索。按单个字符搜索130,000条记录的表是否有效?我想确定应该由 SQL Server 引擎还是在站点上进行搜索?我在想 SQL Server。如果为真,使用 FREETEXT 还是 CONTAINS 全文搜索更好?

好奇社区对此有何看法?还是我离题了?

full-text-search

3
推荐指数
1
解决办法
8977
查看次数

比较先前记录的值

如何比较以前记录的值?

桌子:

ID    SAMPLEDATE    LEVEL    PASSED
1     1/1/2016      0        1
2     1/2/2016      1        1
3     1/3/2016      2        0
4     1/4/2016      1        1
5     1/5/2016      2        0
Run Code Online (Sandbox Code Playgroud)

最后一条记录(由 排序SAMPLEDATE)是否与最后LEVEL一条失败的记录相同?如果是,则返回 TRUE,否则返回 FALSE。

因此,在我的示例数据中,最后一条记录失败并显示为LEVEL2。然后在 2016 年 1 月 3 日失败的最后一条记录(在 2016 年 1 月 5 日之前)是相同的 LEVEL,因此将返回 TRUE。如果是不同的 LEVEL FALSE 将被返回。

sql-server sql-server-2014

2
推荐指数
1
解决办法
1757
查看次数

按基于类别的多列值返回不同的记录

ID    MODEL    MODELSTATUS    CONTROL
11     100      GOOD           XN
24     100      TRENDING       BF
33     101      GOOD           XN
46     102      BAD            BF
50     103      BAD            XN
64     103      BAD            BF
77     104      PENDING        XN
89     104      TRENDING       BF
92     105      TRENDING       BF
93     105      TRENDING       XN
Run Code Online (Sandbox Code Playgroud)

鉴于上面的数据,我将如何返回下面的结果。可以有 1 条或 2 条(最多)具有相同 MODEL 的记录。如果 MODEL 有 2 个记录,则 CONTROL 将不同。

如果 MODESTATUS 为“趋势”,则返回该记录。否则,如果 MODELSTATUS 是 'Pending' 或 'Bad' 返回该记录。否则,如果 MODEL 有 2 条记录,其中 MODELSTATUS 与 CONTROL 的返回记录相同,则为“XN”

ID    MODEL    MODELSTATUS    CONTROL
24    100 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

1
推荐指数
1
解决办法
69
查看次数