佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 3712|回复: 81

SQL杂症集

[复制链接]
发表于 3-8-2006 11:25 AM | 显示全部楼层 |阅读模式
Question 1.

用select top 10 columnname from table 会return 最前十个row,
那,要怎样才能select 第11 到 第20 row 呢?

(Solved)

[ 本帖最后由 tensaix2j 于 3-11-2006 12:57 AM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 3-8-2006 11:30 AM | 显示全部楼层
看来你好像用MSSQL SERVER

如果用MYSQL,你可以用SELECT * FROM XXX LIMIT 11,20,但mssql没有这功能
回复

使用道具 举报

 楼主| 发表于 3-8-2006 12:17 PM | 显示全部楼层
Question 2.

该怎么解决。。当top n, n 不能被variable @i代替。。


declare @i int;
declare @rowcount int;
declare @recipe varchar(50);

set @i=1;

select * from tblrecipe;
set @rowcount=@@rowcount;

select top @i @recipe=recipe from tblrecipe;
       
       



(solved)

[ 本帖最后由 tensaix2j 于 30-8-2006 11:52 AM 编辑 ]
回复

使用道具 举报

发表于 3-8-2006 01:27 PM | 显示全部楼层
我在VB,ASP,ASPNET是用 SELECT  "& SQL &" FROM XXX
在JSP里SELECT "+ SQL +" FROM XXX
在PHP里SELECT "。$SQL。" FROM XXX

供参考
回复

使用道具 举报

 楼主| 发表于 3-8-2006 01:45 PM | 显示全部楼层
问题是现在不碰任何programming language,除了sql本身的情况下来做。。。
回复

使用道具 举报

发表于 3-8-2006 02:12 PM | 显示全部楼层
问题是你没有说你用什么DATABASE SERVER,那要如何帮你?
MSSQL和MYSQL在一些SQL STATEMENT上会有些不同

上面我写了,MYSQL可以用LIMIT 11,20

但MSSQL里没有LIMIT这功能

TOP也不能用TOP 11,20


除非你写store procedure

[ 本帖最后由 max5007 于 3-8-2006 02:13 PM 编辑 ]
回复

使用道具 举报

Follow Us
 楼主| 发表于 3-8-2006 03:49 PM | 显示全部楼层
第一个问题,赞时算是解决了。。
第二个问题比较重要。。
select top n * from tblXXX
就是那个 n 不能换去variable来select..。。


(Solved)

[ 本帖最后由 tensaix2j 于 4-9-2006 10:53 AM 编辑 ]
回复

使用道具 举报

发表于 3-8-2006 04:45 PM | 显示全部楼层
STORE PROCEDURE 可以这样用啊。。我也是酱用。。

给你一个EXAMPLE


CREATE FUNCTION [dbo].[ufn_GenerateIntegers] ( @MinValue INT, @MaxValue INT )
RETURNS @Integers TABLE ( [IntValue] INT )
AS
BEGIN     
        WHILE @MinValue <= @MaxValue     
        BEGIN         
                INSERT INTO @Integers ( [IntValue] ) VALUES ( @MinValue )         
        SET @MinValue = @MinValue + 1     
        END      
RETURN
END
GO        
SET @MinValue = @MinValue + 1     
END      
RETURN
END
GO

这里也有example

http://www.asp101.com/samples/storedprocs.asp

[ 本帖最后由 max5007 于 3-8-2006 04:46 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 3-8-2006 09:07 PM | 显示全部楼层
Select top 10 * from tablexxx where key_column not in (select top 10 key_column from tablexxx)
回复

使用道具 举报

发表于 4-8-2006 01:32 AM | 显示全部楼层
原帖由 tensaix2j 于 3-8-2006 03:49 PM 发表
老大,我不就正在写stored proc 咯。。

第一个问题,赞时算是解决了。。
第二个问题比较重要。。
select top n * from tblXXX
就是那个 n 不能换去variable来select..。。


这个应该是你所要的...

CREATE PROCEDURE [SHOW_COUNT]

        @TOTALCOUNT INT
AS

        EXEC ('SELECT TOP ' + @TOTALCOUNT + ' * FROM tblXXX')
GO
回复

使用道具 举报

 楼主| 发表于 4-8-2006 09:27 PM | 显示全部楼层
原来如此,感激不尽  max and goatstudio 大大
回复

使用道具 举报

发表于 28-8-2006 03:48 PM | 显示全部楼层
原帖由 神仙祖宗 于 3-8-2006 09:07 PM 发表
Select top 10 * from tablexxx where key_column not in (select top 10 key_column from tablexxx)

這個很有玄機,而且很厲害……
這樣都可以……哈哈……我學到新東西了,謝謝你,神仙祖宗
回复

使用道具 举报

发表于 28-8-2006 04:56 PM | 显示全部楼层
原帖由 b4dboyz 于 28-8-2006 03:48 PM 发表

這個很有玄機,而且很厲害……
這樣都可以……哈哈……我學到新東西了,謝謝你,神仙祖宗


这是sub query的运用。。
回复

使用道具 举报

 楼主| 发表于 30-8-2006 11:50 AM | 显示全部楼层
Question 3.


请教SQL

我有一个table..

yymmdd   errordesc  errortype  errorcount
======   =========  =========  ==========
2005/9/1   blah1        1          2
2005/9/1   blah3        3          3
2005/9/1   blah4        4          1
2005/9/2   blah2        2          2
2005/9/2   blah3        3          1
  ...       ..          ..        ..

请教
用 SQL output table 变成如下



yymmdd    errortype1  errortype2  errortype3  errortype4 ........ errortype n
======     =========  =========  ==========   ==========          ===========
2005/9/1      2           0          3             1       ....    errorcount for errortype n
2005/9/2      0           2          1             0       ....    errorcount for errortype n      
  ...         ...        ...         ...          ...                 ...

(Solved)

[ 本帖最后由 tensaix2j 于 4-9-2006 10:53 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 30-8-2006 01:58 PM | 显示全部楼层
Question 4:

请问下,datepart for yyyymmdd 的代码是什么?。。

好象没有yyyymmdd的。。


(Solved)

[ 本帖最后由 tensaix2j 于 4-9-2006 10:54 AM 编辑 ]
回复

使用道具 举报

发表于 30-8-2006 05:35 PM | 显示全部楼层
原帖由 tensaix2j 于 30-8-2006 01:58 PM 发表
请问下,datepart for yyyymmdd 的代码是什么?。。

好象没有yyyymmdd的。。

用 CONVERT

SELECT convert(varchar,datecolumnxxx,112) from tablexxx
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 30-8-2006 06:26 PM | 显示全部楼层
不行。。因为时间会出来。。结果grp不成

select
convert(varchar,[date down],112) as yymmdd
,sum([D/T])

from tbldowntimeeyum04

group by
convert(varchar,[date down],112)

order by yymmdd
回复

使用道具 举报

发表于 31-8-2006 09:52 AM | 显示全部楼层
原帖由 tensaix2j 于 30-8-2006 06:26 PM 发表
不行。。因为时间会出来。。结果grp不成

select
convert(varchar,,112) as yymmdd
,sum()

from tbldowntimeeyum04

group by
convert(varchar,,112)

order by yymmdd


其实这方法是行得通的...
问题应该出在你的 D/T... 这两个没有被 group.
回复

使用道具 举报

 楼主| 发表于 31-8-2006 12:42 PM | 显示全部楼层
不是syntaxerror。。我是说那个。。grp by..
因为没把时间(hh:mm:ss)除干净,结果grp by 那个时间去。。
回复

使用道具 举报

发表于 31-8-2006 02:25 PM | 显示全部楼层
我尝试过了, 112 是没有时间的, 所以 group by 不会有问题.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 14-11-2024 09:17 PM , Processed in 0.218285 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表