我有一个分层表,其中为每个孩子定义了一个父 id(除了父 id 为空的顶级孩子)。现在我想为选定的孩子在一行中显示每个父 ID。
我试图使用 CTE,但 CTE 正在向初始集添加额外的记录。相反,我想用父母列表更新初始集(SELECT 语句选择一些孩子)。
表示例(表 1):
ChildID ParentID
A P
P Q
Q Z
B P
C F
F M
M Q
D H
H Y
Y NULL
Z NULL
Run Code Online (Sandbox Code Playgroud)
如果初始语句将从子 ID 列表中选择 C、A、Q,则预期结果如下:
Selected Child Parent IDs
C F, M, Q, Z
A P, Q, Z
Q Z
Run Code Online (Sandbox Code Playgroud) 我有一个 PostgreSQL 函数find_all_records_with_params(),它返回一个SETOF records. 记录表具有以下列:
table records(
id integer,
type integer,
created date,
content text
);
Run Code Online (Sandbox Code Playgroud)
我想选择current_date - created超过 90 天的所有记录。但是,如果此查询不存在,我想选择 1 条最早日期的记录created。
我尝试使用递归 cte(如下所示)来执行此操作,但它不允许使用 if/else 逻辑。我试图避免调用该find_all_records_with_params()函数两次,并且如果可能的话,我不希望创建临时表。
with most_records as (select * from find_all_records_with_params()),
filtered_records as (select * from most_records where current_date - created > 90)
if exists(select * from filtered_records) then
select * from filtered_records;
else
select * from most_records order by created asc limit 1;
end if;
Run Code Online (Sandbox Code Playgroud) 我需要获取分层表的根节点(具有 PARENT_ID = NULL):
ID | PARENT_ID
60 NULL
21 60
11 NULL
23 11
24 21
25 23
14 24
13 25
Run Code Online (Sandbox Code Playgroud)
我想要这个结果:
ID | PARENT_ID | ROOT_ID |
-------------------------
1 NULL NULL
2 1 1
3 1 1
4 2 1
5 4 1
6 NULL NULL
7 6 6
8 7 6
Run Code Online (Sandbox Code Playgroud)
CTE是个好方法吗?我怎样才能创建它?
显然我可以有更多的一个根节点。我必须获取每个节点的根节点。
这就是我所做的:
;WITH RCTE AS
(
SELECT ID, PARENT_ID, ID as ROOT_ID
FROM TABLE r1
WHERE NOT EXISTS (SELECT * FROM TABLE r2 WHERE …Run Code Online (Sandbox Code Playgroud) sql sql-server recursion recursive-query common-table-expression
我有这样的 CTE:
WITH source1 as (
SELECT blah FROM blah
), source2 as (
SELECT moreblah FROM source1)
SELECT * FROM source2;
Run Code Online (Sandbox Code Playgroud)
我想将此查询的结果插入到一个表中,但是当我这样写时:
WITH source1 as (
SELECT blah FROM blah
), source2 as (
SELECT moreblah FROM source1)
INSERT INTO newtable SELECT * FROM source2;
Run Code Online (Sandbox Code Playgroud)
它说我有一个语法错误Expected "(" or "," or keyword SELECT but got keyword INSERT。我想知道这是否是一个 Bigquery 问题 b/c 我看过其他像这样的地方,说我的 INSERT INTO 应该可以工作。任何帮助,将不胜感激!
我不是 SQL 开发人员。我在下面有这段代码,我的 DBA 希望我进一步简化。希望你们可以看看并帮助如何进一步简化这个查询。这里可以不使用 CTE 吗?谢谢。
;
WITH CTE_tmp1(RecId, Newdata, Changecode) AS
(
SELECT RecId, Newdata, Changecode
FROM dbo.POLL
WHERE Changecode = 1
)
UPDATE dbo.POLL
SET RecId = T.Newdata
FROM dbo.POLL P
INNER JOIN CTE_tmp1 T
ON P.RecId = T.RecId
WHERE P.Changecode IS NOT NULL AND P.Changecode <> 1
Run Code Online (Sandbox Code Playgroud)
`
我需要对 T-SQL 联合查询进行排序。无论我如何编写查询,一旦引入该ORDER BY子句,我都会收到语法错误。
关键字“order”附近的语法不正确
WITH s1
AS (select '1' as id
union
select '4' as id
union
select '2' as id
union
select '3' as id
union
select '5' as id
),
s2
AS (select '4' as id,
100 as val
union
select '1' as id,
500 as val
union
select '3' as id,
700 as val
union
select '2' as id,
800 as val
)
(select '9' as id,
700 as val) -- id 9 …Run Code Online (Sandbox Code Playgroud) With CTE as
(
Select ProductCategoryId,
Count(*) [Count],
Max(ProductName) ProductNames,
0 [Rank]
From Product
Group By ProductCategoryId
Union ALL
Select CTE.ProductCategoryId,
CTE.[Count],
ProductNames + N' , ' + ProductName,
[Rank]+1
From
CTE inner join Product
on CTE.ProductCategoryId = Product.ProductCategoryId
and CTE.ProductNames Not Like '%'+ProductName+'%'
and CTE.[Rank] < cte.[Count]
)
Select ProductCategoryId,
Max(ProductNames) ProductNames,
Max([Count]) [Count]
From CTE
Group by ProductCategoryId
order by ProductCategoryId
Run Code Online (Sandbox Code Playgroud) 我有以下格式的数据:
FromStateID ToStateID Seconds
1 2 10
2 3 20
3 4 15
4 5 5
Run Code Online (Sandbox Code Playgroud)
我需要以下输出
FromStateID ToStateID Seconds
1 2 10
2 3 20
3 4 15
4 5 5
1 3 10+20
1 4 10+20+15
1 5 10+20+15+5
2 4 20+15
2 5 20+15+5
3 5 15+5
Run Code Online (Sandbox Code Playgroud)
此输出显示所花费的总时间FromStateId,以ToStateId在时间顺序每一个组合。
请帮忙。