我有过
;with cte as
(
select rn=1, name = CAST('name'as varchar(50))
union all
select rn+1, CAST(name as varchar(50))+ CAST( (rn+1) as varchar(50))
from cte where rn<100)
select * from cte
错误
Msg 240、级别16、状态1、第1行类型在递归查询“”的列“名称”中的锚点和递归部分之间不匹配。
我需要帮助理解这个查询的递归部分:
WITH EmpsCTE AS
(
SELECT empid, mgrid, firstname, lastname
FROM HR.Employees
WHERE empid = 2
UNION ALL
SELECT C.empid, C.mgrid, C.firstname, C.lastname
FROM EmpsCTE AS P
JOIN HR.Employees AS C
ON C.mgrid = P.empid
)
SELECT empid, mgrid
Row No Bus No Kilometer From To
1 10 100 Salem Trichy
2 11 150 Trichy Madurai
3 12 180 madurai Chennai
4 13 50 Salem coimbatore
5 14 200 coimbatore chennai
6 15 300
有人能帮我理解下面错误的细节吗?这是用于Server 2008的。
我自己修复了它,并发现了许多显示相同修复的搜索点击,但没有解释为什么在CTE中会出现这种情况。
类型在递归查询"CTE“的列"txt”中的锚和递归部分之间不匹配。
这里有一个例子,我用CAST解决了这个问题,但是为什么要工作呢?
WITH CTE(n, txt) AS
(
--SELECT 1, '1' --This does not work.
--SELECT 1, CAST('1'
你可以在这里测试我的代码:
打印斐波那契续集的前n项的代码:
with fibo(s2,s1,n) as(
select 1 ,1 ,1 from dual
union all
select s1+s2,s2,n+1 from fibo where n<12
)
select s2 from fibo;
它可以工作,但它使用的内存可能是所需内存的两倍。每一行都包含选择前的第n和第n-1个续集术语
因此,我尝试使用Lag函数
with fibo(s,n) as(
select 1,1 from dual
union all
select
我在玩报告,似乎row_number在递归中不起作用。
!!我简化了这个例子!!
表中有3项记录:
declare @sometable table (id int, id2 int)
insert into @sometable
select 1 as id, 11 as id2
union all
select 2, 22
union all
select 3, 33
在CTE中,选择All并标记下一次迭代中要排除的第一条记录:
;with cte(iteration, ord, id, id2, deal) as
(
select
我在sql编程中非常新,.i有以下两个问题。
WITH CTE_Stars AS
(
SELECT CONVERT(VARCHAR(10), '*') Stars
UNION ALL
SELECT CONVERT(VARCHAR(10), CTE_Stars.Stars+'*') Stars
FROM CTE_Stars
WHERE LEN(Stars) < 6
)
SELECT *
FROM CTE_Stars
有人能解释一下上面的查询是如何工作的吗?第二,如果没有转换函数,这个查询就不能工作。为什么我
我有一个2列的表(id,childId)。数据如下:
1,2
3,4
2,空
4,空
我正在使用CTE,这样我就可以得到孩子的记录:
DECLARE @id TABLE (id int);
INSERT INTO @id SELECT 1;
INSERT INTO @id SELECT 3;
WITH cte AS
(
SELECT id, childId
FROM mytable
WHERE
id IN (SELECT id FROM @id)
UNION ALL
SELECT b.id, b.childId
WITH counting_numbers as (
SELECT
-- Initialize number
1 AS number
UNION ALL
SELECT
-- Increment number by 1
number+1
FROM counting_numbers
-- Set the termination condition
WHERE number < 50)
如果我没记错的话,每个循环产生2个输出。如果是这样的话,UNION ALL将它们合并为一
几天前,我问了一个关于1,2和3。学位联系的问题。和@Snoopy提供了一个文章链接,可以解决我的所有问题。
我仔细研究了这篇文章,但我无法将递归查询与SQL Server一起使用。
PostgreSQL查询:
SELECT a AS you,
b AS mightknow,
shared_connection,
CASE
WHEN (n1.feat1 = n2.feat1 AND n1.feat1 = n3.feat1) THEN 'feat1 in common'
WHEN (n1.feat2 = n2.feat2 AND n1.fea
我希望使用从以下CTE获得的结果作为select语句,以便将其嵌套到另一个查询中--据我所知,不能使用嵌套在查询中的CTE;
WITH cte_exp AS
(
select
[PrimaryKey],
[SelfKey]
from
MyTable
where PrimaryKey = 1
UNION ALL
select
i.[PrimaryKey],
i.[SelfKey]
from
MyTable i
inner join c
我正在编写一个使用Salesforce数据仓库的报告。从本质上讲,给定一个特定的帐户,我需要找到相应的层次结构。这可以在任何级别下,但它必须获取所有节点。
以下是我所拥有的:
WITH tree (id, parentid, level, name) as
(
SELECT id, parentid, 0 as level, name
FROM accounts
WHERE (parentid IS NULL
AND recordtypeid NOT IN ('012G0000001NLJSIA4', '012G0000001NLKGIA4&
数据库中有以下SQL函数:
ALTER FUNCTION [dbo].[Split_Using] (@StringToSplit varchar(8000),
@Separator varchar(128))
RETURNS TABLE
AS
RETURN
WITH Indices
AS (SELECT
0 Start,
1 Ends
UNION ALL
SELECT
Ends,
CHARINDEX(@Separator, @StringToSplit, Ends) + LEN(@Separator)
FROM Indices
WHE
我有一张临时表,上面有两张这样的记录:
select * into #Tbl from (select 1 id union select 2) tbl
以及相关指数:
Create nonclustered index IX_1 on #T(id)
下面的查询需要运行4000 to :
SELECT AncestorId
FROM myView
WHERE AncestorId =ANY(select id from #t)
但是,相同的查询(带有IN和文字值)只需运行3ms!:
SELECT ProjectStructureId
FROM myView
WHER
要求是编写一个接受2个参数的表值函数。
@start_number (a integer value)
@end_number (a integer value)
该函数将返回一个表,其中包含@start_number和@end_number之间的数字,包括两个参数数字。
代码如下:
Declare @start_number int
Declare @end_number int
Declare @max_recursion int
Set @start_number = 10
Set @end_number = 100
Set @max_recursion = (@end_number
我有一个有防御能力的CTE,如下
;With Paths as (
select s.ID as RootID,t.subject_ID,t.Parent_ID ,t.text, CONVERT(nvarchar(max),t.text) as Path,convert(nvarchar(max),t.subject_ID) as P2
from
@search s
inner join
SubjectHierarchy t
on
s.ID = t.subje
Server中的表具有多代的父引用到子引用的映射。
我必须取得以下成果:
Level No || Child Count
因此,我对此有以下查询:
SELECT
'L1' LEVEL, COUNT(ChildRef) CHILD
FROM
[dbo].[TOMatriX]
WHERE
ParentRef = 1
UNION ALL
SELECT
'L2' LEVEL, COUNT(ChildRef) CHILD
FROM
[dbo].[TOMatriX]
WHERE
ParentRef IN (SE
我从我的遗留应用程序中得到了以下查询,在执行此查询时,响应时间太长。因此,我计划将这个复杂的查询分解为多个查询,并在应用程序端执行一些操作,即更新的应用程序。
WITH members AS (
SELECT
shift_group_code,
shift_code,
0 AS isCycle,
CHAR(10) + CAST(shift_group_code AS varchar(max)) + CHAR(10) AS [path]
FROM shift_grouping
WHERE w
我有一个文档列表,在那里我必须根据给定的匹配获取一些结果。我在用regex做这个。我使用这个正则表达式来匹配我在文档中的查询。
(.*)query(.*)
他们是这个准则中的一个问题。例如,如果您正在搜索查询"mba“,那么regex将是
(.*)mba(.*)
它给了我这样的结果
(mca or mba) along with doeacc 'b' level // correct "mba" preceeded by '('
academy of theatre arts/dramatic arts, univer
执行以下查询:
WITH cte AS (
SELECT CAST('" + mindate+ "' as varchar(255)) as fdate
UNION ALL
SELECT CAST(DATEADD(day, 1, fdate) as date)
FROM cte
WHERE fdate < '" + tday+"'
)
SELECT COUNT(fdate) AS Fdate
FROM cte left join tbl_Attendence on cte.fdate
我的Server数据库中有以下数据:
Id | Name | LinkedId
---+------+----------
1 | A | 1
2 | B | 2
3 | C | 1
4 | D | 3
5 | E | 4
现在,我想编写一个存储过程,其中应该显示以下记录:
注意事项:LinkedId具有与该名称相关联的Id。
例如,::"C“与"A”相关联
Id | Name | LinkedId
---+------+---------
1 | A | 1
2 | B | 2
3 | C | 1
4 | D
我有下面的样本数据。
IF OBJECT_ID('tempdb..#tempData1') IS NOT NULL
DROP TABLE #tempData1
CREATE TABLE #tempData1
(
ParentItemId varchar(20),
ChildItemId varchar(20)
)
INSERT INTO #tempData1 VALUES('2000-194-819','2000-212-595')
INSERT INTO #tempData1 VALUES('2000
我试图遍历Server数据库中的所有外键,以生成表之间的所有可能路径。下面的查询似乎主要适用于我所需要的内容,只是它似乎无限期地运行。我的目标是能够在数据库中的任意两个表之间找到最有效的外键路径,方法是使用对目标表的“跳数”最少的路径。是否有办法限制下面的查询,使其不超过20跳?
WITH cte
AS
(
SELECT
fk.create_date
, fk.modify_date
, fkc.constraint_object_id AS ConstraintId
, OBJECT_NAME(fkc.constrai
我正在处理一个存储过程,并在SQL Server中使用CTE,我试图从两个表中获取一些数据,但是当执行到CTE查询时,它会得到一个无限循环,并且永远不会结束,有什么方法可以防止这种无限循环吗?
这是我创建的查询:
WITH tableName(Id, enddate, statusDte, closeId, shceDte, calcDte, closeEndDte, ParentId, LastClose, lasCloseDte, closeClass,addSe,twon,code)
AS
(
SELECT
tba.Id,
CASE WHEN t
以下查询的行为与我对CTE的理解不同,有人能解释一下为什么会这样吗?
with cte (n) as
(
select 1
union all
select n + 1 from cte where n<10
)
select * from cte
我期望得到以下输出:
1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10
但我得到了:
1,2,3,4,5,6,7,8,9,10
为什么?
我有一个CTE来显示两个表上的依赖树(父表和子表)。存在导致循环依赖的数据问题,导致引发最大递归级别错误。即
Table: Parent
Id
ItemId
Table: Child
Id
ParentId
ItemId
Example Circular Ref data
Table: Parent
Id ItemId
1 A
2 B
Table: Child
Id ParentId ItemId
1 1 B
2 2 A
这些表中有数千行。我如何写一个查询,识别违规的引用?或者,是否有一种方法来设置最大递归级别,然后在命中
我从不将CTE与递归一起使用。我刚读了一篇关于它的文章。本文在Sql server CTE和递归的帮助下显示员工信息。它基本上是显示员工和他们的经理信息。我不能理解这个查询是如何工作的。下面是查询:
WITH
cteReports (EmpID, FirstName, LastName, MgrID, EmpLevel)
AS
(
SELECT EmployeeID, FirstName, LastName, ManagerID, 1
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
SELEC