我已经看到过几次提到Oracle WITH子句来为这样的子查询别名:
WITH myData AS (SELECT id, text FROM SomeTable)
SELECT myData from SomeOtherTable
Run Code Online (Sandbox Code Playgroud)
是否有任何版本的SQL Server支持此功能?如果没有,他们有没有特别的理由?性能?错误使用的可能性?
如果可能的话,直接在C sharp中调用CTE.任何人都可以告诉我如何在C sharp中调用CTE?
我有一个使用CTE编写的SQL查询.现在,我正在移动存储库以使用Entity Framework 5.
关于如何使用Entity Framework 5集成(或重写)基于CTE的查询,我感到很遗憾.
我正在使用EF5的POCO实体并拥有一堆Map类.没有EDMX文件等.
我现在感觉自己像一个完全的noob,并希望任何帮助指向我正确的方向.
CTE查询如下
WITH CDE AS
(
SELECT * FROM collaboration.Workspace AS W WHERE W.Id = @WorkspaceId
UNION ALL
SELECT W.* FROM collaboration.Workspace AS W INNER JOIN CDE ON W.ParentId = CDE.Id AND W.ParentId <> '00000000-0000-0000-0000-000000000000'
)
SELECT
W.Id AS Id,
W.Name AS Name,
W.Description AS Description,
MAX(WH.ActionedTimeUtc) AS LastUpdatedTimeUtc,
WH.ActorId AS LastUpdateUserId
FROM
collaboration.Workspace AS W
INNER JOIN
collaboration.WorkspaceHistory AS WH ON W.Id = WH.WorkspaceId
INNER JOIN
(
SELECT TOP 10
CDE.Id
FROM …Run Code Online (Sandbox Code Playgroud) 我刚刚在今天下午发现CTE并在2小时内享受它们后,我意识到他们并没有像我们用其他任何语言学到的那样进行常见的递归.
我的意思是,我总是看到像树搜索一样的递归.所以我期待CTE一直到它发现的第一片叶子,但没有.他分层工作.它从头部开始,然后是所有分支,然后是所有子分支等等......然后是叶子.
有没有办法让它以不同的方式进行搜索?也许我错过了一些东西......我在SQL Server 2005上工作(非,我无法改变2008年)
为了清楚起见,我不想要:
但
谢谢
我有一张桌子
Node | NoteParent | Num
A | Root | 10
B | A | 20
C | A | 30
G | B | 40
D | B | 50
E | G | 70
F | C | 60
Run Code Online (Sandbox Code Playgroud)
我有一个问题,我如何使用CTE来求和节点的数量取决于它与另一个节点的链接.例如,我有节点B有Num是20,节点B是节点G和节点D的父节点,节点G也是节点E的父节点所以我将使用所有数量的相关节点20(B)+ 40( G)+ 50(D)+ 70(E)= 180
结果将是:
Node | NoteParent | Num | SUM
A | Root | 10 | 280
B | A | 20 | 180
C | A | 30 | 90
G | B | …Run Code Online (Sandbox Code Playgroud) 以下是我的表格格式.表名:: USERS
userid reporttouserid
------ ------------
101 NULL
102 101
103 102
Run Code Online (Sandbox Code Playgroud)
现在我需要一个查询来列出101下的所有子用户ID 102和103两者(103是间接在101以下,因为其父102在101以下)
我在postgresql中看到了常见的表表达式,但却无法弄清楚如何去做.
我想创建一个摘要报告.我对CTE来说是全新的.
错误详情:
消息102,级别15,状态1,行1
'''附近的语法不正确.
消息102,级别15,状态1,行11
'','附近的语法不正确.
码:
WITH T1(PlannedFY, Media_Activity_Type.[Type], ReportingQuarter, Summary, ID) AS
(
SELECT
COUNT(MediaActivities.MediaActivityId) AS [PlannedFY],
Media_Activity_Type.[Type] AS [ID],
MediaActivities.ReportingQuarter,
MediaActivities.Summary,
MediaActivities.TypeId
FROM
Media_Activity_Type
INNER JOIN
MediaActivities ON Media_Activity_Type.TypeId = MediaActivities.TypeId
GROUP BY
MediaActivities.MediaActivityId, Media_Activity_Type.[Type],
MediaActivities.ReportingQuarter, MediaActivities.Achivied,
MediaActivities.Summary, MediaActivities.TypeId
),
T2(Achieved, ID) AS
(
SELECT
COUNT(MediaActivities.Achivied) AS [Achieved],
Media_Activity_Type.TypeId AS [ID]
FROM
MediaActivities
INNER JOIN
Media_Activity_Type ON MediaActivities.TypeId = Media_Activity_Type.TypeId
GROUP BY
Media_Activity_Type.TypeId, MediaActivities.Achivied
HAVING
MediaActivities.Achivied = 1
)
SELECT
T1.*, T2.Achieved
FROM
T1
INNER JOIN
T2 …Run Code Online (Sandbox Code Playgroud) 我有一个SQL查询
with subtable as (
................
)
select *
from subtable
Run Code Online (Sandbox Code Playgroud)
我想将select语句中的记录插入表中.寻找像这样的东西:
with subtable as (......)
insert into newtable
select *
from subtable
Run Code Online (Sandbox Code Playgroud)
但是,在Vertica中,INSERT不能与WITH(CTE)语句一起使用.
这有什么工作吗?
谢谢您的帮助
例子假设:
with CTE1 as (select col1 from t1) select * from CTE1;
with CTE2 as (select col2 from t2 where col2=col1)
select * from CTE2;
Run Code Online (Sandbox Code Playgroud)
这可能吗.我尝试过很少的代码,但没有一个是有用的.请帮我.
sql ×6
sql-server ×5
t-sql ×4
oracle ×2
recursion ×2
.net ×1
c# ×1
c#-3.0 ×1
hierarchy ×1
oracle12c ×1
postgresql ×1
sql-insert ×1
vertica ×1