标签: common-table-expression

在SQL CTE中调用存储过程

您是否允许在SQL CTE语句中执行存储过程?我对sql cte查询有点新...

sql sql-server-2005 common-table-expression

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

从MySQL中的分层数据生成基于深度的树(无CTE)

嗨很多天我一直在研究MySQL中的这个问题,但我无法弄明白.你们有什么建议吗?

基本上,我有一个类别表,其域名包括:id,name(类别名称)和parent(类别的父ID).

示例数据:

1  Fruit        0
2  Apple        1
3  pear         1
4  FujiApple    2
5  AusApple     2
6  SydneyAPPLE  5
....
Run Code Online (Sandbox Code Playgroud)

有许多级别,可能超过3个级别.我想创建一个sql查询,根据他的层次结构对数据进行分组:parent> child> grandchild>等.

它应该输出树结构,如下所示:

1 Fruit 0
 ^ 2 Apple 1
   ^ 4 FujiApple 2
   - 5 AusApple 2
     ^ 6 SydneyApple 5
 - 3 pear 1
Run Code Online (Sandbox Code Playgroud)

我可以使用单个SQL查询执行此操作吗?我尝试过并且确实有效的替代方案如下:

SELECT * FROM category WHERE parent=0
Run Code Online (Sandbox Code Playgroud)

在此之后,我再次遍历数据,并选择parent = id的行.这似乎是一个糟糕的解决方案.因为它是mySQL,所以不能使用CTE.

mysql common-table-expression hierarchical-data

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

如何将MSSQL CTE查询转换为MySQL?

在我的MySQL模式中,我有category(id, parentid, name)

在MSSQL中,我有CTE查询(从下到上为所提供的类别ID构建一个类别树:

with CTE (id, pid, name) 
as
(
    select id, parentid as pid,name
    from category
    where id = 197
      union all
        select CTE.pid as id , category.parentid as pid, category.name
        from CTE 
          inner join category 
            on category.id = CTE.pid
 )
 select * from CTE 
Run Code Online (Sandbox Code Playgroud)

如何将该查询"转换"为MySQL?

mysql sql-server common-table-expression adjacency-list

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

CTE或CTE

一直坚持使用SQL2000太长时间了,我并没有真正接触过Common Table Expressions.

我在这里给出的答案(#4025380)这里(#4018793)已经违背了流程,因为他们没有使用CTE.

我很感激,对于递归它们是beez kneez,并且有一些查询可以通过它们的使用大大简化,但在什么时候它们的使用只是轻浮?与子查询或联接相比,它们是否具有很好的性能优势?他们真的简化了代码并使其更易于维护吗?

简而言之,何时使用CTE而不是'较小'语法是一种好习惯.

sql-server maintainability performance common-table-expression

26
推荐指数
2
解决办法
5317
查看次数

具有分页和计数的SQL Server查询

我想用分页进行数据库查询.所以,我使用了一个通用表表达式和一个排名函数来实现这一点.看下面的例子.

declare @table table (name varchar(30));
insert into @table values ('Jeanna Hackman');
insert into @table values ('Han Fackler');
insert into @table values ('Tiera Wetherbee');
insert into @table values ('Hilario Mccray');
insert into @table values ('Mariela Edinger');
insert into @table values ('Darla Tremble');
insert into @table values ('Mammie Cicero');
insert into @table values ('Raisa Harbour');
insert into @table values ('Nicholas Blass');
insert into @table values ('Heather Hayashi');

declare @pagenumber int = 2;
declare @pagesize int = 3;
declare @total int;

with …
Run Code Online (Sandbox Code Playgroud)

sql-server pagination common-table-expression

26
推荐指数
1
解决办法
7万
查看次数

如何参考一次CTE两次?

我有一个非常胖的公用表表达式,其中包含行号,以便我可以返回分页结果集.我还希望在分页结果集之前返回与查询匹配的记录总数.

with recs as (select *, row_number() over (order by id) as rownum from ......)
select * from recs where rownum between @a and @b .... select count(*) from recs
Run Code Online (Sandbox Code Playgroud)

显然我上面的查询是不完整的,但它只是为了说明我的观点.我想要一页结果和匹配总数.如何在不必复制和粘贴整个20+线CTE的情况下完成此操作?

t-sql sql-server common-table-expression sql-server-2008

25
推荐指数
2
解决办法
3万
查看次数

Oracle使用with子句创建表

我可以使用with子句创建的查询创建表吗?

sql oracle common-table-expression

25
推荐指数
1
解决办法
4万
查看次数

WITH子句和子查询之间的区别?

WITH子句和子查询之间有什么区别?

1. WITH table_name as ( ... )

2. select *
    from ( select curr from tableone t1
             left join tabletwo t2
               on (t1.empid = t2.empid)
         ) as temp_table
Run Code Online (Sandbox Code Playgroud)

sql oracle subquery common-table-expression

24
推荐指数
3
解决办法
2万
查看次数

如何在CTE之后使用if语句(SQL Server 2005)

昨晚我写的是一个简单的T-SQL程序

DECLARE @ROLEID AS INT

SELECT @ROLEID = [ROLE ID] FROM TBLROLE

;WITH CTE
AS
( 
    SELECT * FROM SOMETABLE
)
IF (@ROLEID  = 1) 
BEGIN
      //SOMECODE
END
ELSE IF(@ROLEID  = 2) 
BEGIN
      //SOMECODE
END
ELSE
BEGIN 
      //SOMECODE
END
Run Code Online (Sandbox Code Playgroud)

我在编译后发现它抛出的错误类似于"如果附近有错误的语句"

怎么了?

但是,我通过使用其他方式做到了这一点.但我想知道为什么它不起作用!

sql t-sql sql-server sql-server-2005 common-table-expression

23
推荐指数
3
解决办法
4万
查看次数

在sql server cte中获取"没有为'd'的第2列指定列"?

我有这个查询,但它不能正常工作,

with c as (select 
               month(bookingdate) as duration, 
               count(*) as totalbookings 
           from 
               entbookings
           group by month(bookingdate)
          ),
     d as (SELECT 
               duration, 
               sum(totalitems) 
           FROM 
               [DrySoftBranch].[dbo].[mnthItemWiseTotalQty] ('1') AS BkdQty
           group by duration
          )

select 
    c.duration, 
    c.totalbookings, 
    d.bkdqty 
from
    c 
    inner join d 
    on c.duration = d.duration
Run Code Online (Sandbox Code Playgroud)

当我跑这个,我得到了

Msg 8155,Level 16,State 2,Line 1
没有为'd'的第2列指定列.

谁能告诉我我做错了什么?

另外,当我跑这个,

with c as (select 
               month(bookingdate) as duration, 
               count(*) as totalbookings 
           from 
               entbookings
           group by month(bookingdate)
          ),
     d as (select 
               month(clothdeliverydate), 
               SUM(CONVERT(INT, deliveredqty)) 
           FROM 
               barcodetable
           where 
               month(clothdeliverydate) is …
Run Code Online (Sandbox Code Playgroud)

sql sql-server group-by calculated-columns common-table-expression

22
推荐指数
6
解决办法
9万
查看次数