佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: tensaix2j

SQL杂症集

[复制链接]
 楼主| 发表于 1-9-2006 09:55 AM | 显示全部楼层
明白了。。原来是我import from csv,它变varchar 去。。
但那112是怎么看?

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

使用道具 举报


ADVERTISEMENT

发表于 1-9-2006 10:19 AM | 显示全部楼层
112 怎么看? 它只是一个 format.
回复

使用道具 举报

发表于 3-9-2006 01:20 AM | 显示全部楼层
select convert(varchar,[date down],112), 'errortype1' = sum(Case
                                               when errortype = 1  then errorcount
                                               else 0
                                               End),
                                         'errortype2' = sum(Case
                                               when errortype = 2  then errorcount
                                               else 0
                                               End),
                                         'errortype3' = sum(Case
                                               when errortype = 3  then errorcount
                                               else 0
                                               End),
                                         'errortype4' = sum(Case
                                               when errortype = 4  then errorcount
                                               else 0
                                               End)
       from tbldowntimeeyum04
       group by convert(varchar,[date down],112)


原帖由 tensaix2j 于 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  ...

[ 本帖最后由 thunderstorm 于 3-9-2006 01:27 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 4-9-2006 10:50 AM | 显示全部楼层
原帖由 thunderstorm 于 3-9-2006 01:20 AM 发表
select convert(varchar,,112), 'errortype1' = sum(Case
                                               when errortype = 1  then errorcount
                                               else 0
   ...



哈,果然
谢了。。但现在有百多个errortype..
看来要用string,再用exec(string) 了。。
回复

使用道具 举报

发表于 4-9-2006 12:18 PM | 显示全部楼层
果然什么???

如果你的errortype是固定的那用select case就可以了,但如果errortype不固定或很大,那你应该尝试用OLAP的cubes。(OLAP 我不熟,你可以查看SQL Book Online的 Help)。


原帖由 tensaix2j 于 4-9-2006 10:50 AM 发表



哈,果然
谢了。。但现在有百多个errortype..
看来要用string,再用exec(string) 了。。
回复

使用道具 举报

 楼主| 发表于 4-9-2006 01:54 PM | 显示全部楼层
想说果然可以。解决了。谢谢。




  1. declare @strsql varchar(8000)
  2. declare @i int
  3. declare @errtotaltype int

  4. set @errtotaltype=43


  5. set @strsql=         ' select errdate,'
  6. set @strsql=@strsql+ 'error1 = sum(Case when errtype = 1  then errcount else 0 End) '

  7. set @i=2;

  8. while @i <= @errtotaltype
  9. begin
  10. set @strsql= @strsql + ',error'+ convert(varchar,@i,2)+ ' = sum(Case when errtype = '+ convert(varchar,@i,2)+'  then errcount else 0 End) '
  11. set @i=@i+1
  12. end

  13. set @strsql=@strsql+ ' from  vwErrorfbeyd07 '
  14. set @strsql=@strsql+ ' group by errdate '
  15. set @strsql=@strsql+ ' order by errdate '

  16. exec(@strsql)
  17. go
复制代码

[ 本帖最后由 tensaix2j 于 23-11-2006 07:47 AM 编辑 ]
回复

使用道具 举报

Follow Us
发表于 4-9-2006 09:50 PM | 显示全部楼层
ID  ConLine      Amount
1   1               100
2   1              -100
3   2               200
4   2              -200
5   3              -300
6   3               300

请问要如何才能用query弄成

ID  ConLine      Amount
1   1               100
3   2               200
5   3              -300

谢谢
回复

使用道具 举报

发表于 4-9-2006 11:28 PM | 显示全部楼层
找出每个Conline的第一个record ?

select a.*
       from tbTable a, (
                              select ConLine, Min(ID) as 'ID'
                              from tbTable
                              group by ConLine ) b
       where a.ID = b.ID
order by 1



原帖由 DRAGONISM 于 4-9-2006 09:50 PM 发表
ID  ConLine      Amount
1   1               100
2   1              -100
3   2               200
4   2              -200
5   3              -300
6   3               300

请问要如何才能用quer ...
回复

使用道具 举报


ADVERTISEMENT

发表于 5-9-2006 06:50 PM | 显示全部楼层
俺也有问题请教 :

table_a
def     col1     col2      
--------------------------
0       a1         b1        
0       a2         b2      
1       a3         b3      
2       a4         b4      
0       a5         b5      


效果:

def     result     
-----------------
0       a1        
0       b1
0       a2  
0       b2      
1       a3        
2       a4        
0       a5   
0       b5   

凡是 ref = 0 就分开两个, 一个拿 col1, 第二个拿 col2

如果不要用store procedure该如何作?用纯SQL
回复

使用道具 举报

发表于 5-9-2006 09:34 PM | 显示全部楼层
select def, col1 as 'result' from tbTable where def = 0  union all
select def, col2 as 'result' from tbTable where def = 0  union all
select def, col1 as 'result' from tbTable where def <> 0

原帖由 神仙祖宗 于 5-9-2006 06:50 PM 发表
俺也有问题请教 :

table_a
def     col1     col2      
--------------------------
0       a1         b1        
0       a2         b2      
1       a3         b3      
2       a4         b4 ...
回复

使用道具 举报

发表于 5-9-2006 09:51 PM | 显示全部楼层
SELECT def, col1 FROM table1
UNION
SELECT def, col2 FROM table1 WHERE def = 0
回复

使用道具 举报

发表于 6-9-2006 11:12 AM | 显示全部楼层
请教一个简单的问题...我还是初学者...

如果是要DISPLAY一个Employee的名字,还有一个MESSAGE是看薪金的..5K就DISPLAY LOW,10K~20K 就DISPLAY MEDIUM....

select Lname,salary from employee
where salary > 100000

然后就HANG在这里了....
回复

使用道具 举报

发表于 6-9-2006 11:49 AM | 显示全部楼层
select Lname,salary,
case
when salary < 5000 then 'low'
when salary >5000 and salary <10000 then 'medium'
when salary > 10000 then 'high'
end as Status
from employee


只要用case when 就可以了。
回复

使用道具 举报

发表于 6-9-2006 12:03 PM | 显示全部楼层
原帖由 thunderstorm 于 5-9-2006 09:34 PM 发表
select def, col1 as 'result' from tbTable where def = 0  union all
select def, col2 as 'result' from tbTable where def = 0  union all
select def, col1 as 'result' from tbTable where def <>  ...

谢谢,呵呵。结果还是只有union吗?
但是他不能达到我要的排法
回复

使用道具 举报

发表于 6-9-2006 12:33 PM | 显示全部楼层
你要的是怎样的result
可以详细些吗?
回复

使用道具 举报

发表于 6-9-2006 01:42 PM | 显示全部楼层
原帖由 sawyih1 于 6-9-2006 11:49 AM 发表
select Lname,salary,
case
when salary < 5000 then 'low'
when salary >5000 and salary <10000 then 'medium'
when salary > 10000 then 'high'
end as Status
from employee


只要用 ...


感谢教导,可以了
回复

使用道具 举报


ADVERTISEMENT

发表于 18-9-2006 05:44 PM | 显示全部楼层
再来一个问题,两个表:

DOTABLE :
DONO DODATE    CARDCODE    ITEMCODE    QTY
D1   1/1/2006    C001      I001         5
D2   1/1/2006    C001      I002         10
D3   1/1/2006    C002      I001         8
D4   2/1/2006    C001      I002         8
      
RETURNTABLE
RTNO    RTDATE    CARDCODE    ITEMCODE    QTY
R1     5/1/2006    C001        I001        2
R2     6/1/2006    C001        I001        3
R3     7/1/2006    C001        I002        15
R4     8/1/2006    C001        I002        1


如何使用SQL得到这样:?

FIFO RESULT
DONO  DODATE  CARDCODE  ITEMCODE  DOQTY  RTNO  RTDATE    RTQTY  BALANCE
  D1  1/1/2006   C001   I001       5      R1   5/1/2006   2       3
  D1  1/1/2006   C001   I001       5      R2   6/1/2006   3       0
  D2  1/1/2006   C001   I002       10     R3   7/1/2006   10      0
  D4  2/1/2006   C001   I002       8      R3   7/1/2006   5       3
  D3  1/1/2006   C002   I001       8      NULL    NULL    NULL    8
回复

使用道具 举报

发表于 18-9-2006 06:42 PM | 显示全部楼层
原帖由 神仙祖宗 于 18-9-2006 05:44 PM 发表
再来一个问题,两个表:

DOTABLE :
DONO DODATE    CARDCODE    ITEMCODE    QTY
D1   1/1/2006    C001      I001         5
D2   1/1/2006    C001      I002         10
D3   1/1/2006    C002      I001         8
D4   2/1/2006    C001      I002         8
      
RETURNTABLE
RTNO    RTDATE    CARDCODE    ITEMCODE    QTY
R1     5/1/2006    C001        I001        2
R2     6/1/2006    C001        I001        3
R3     7/1/2006    C001        I002        15
R4     8/1/2006    C001        I002        1

FIFO RESULT
DONO  DODATE  CARDCODE  ITEMCODE  DOQTY  RTNO  RTDATE    RTQTY  BALANCE
  D1  1/1/2006   C001   I001       5      R1   5/1/2006   2       3
  D1  1/1/2006   C001   I001       5      R2   6/1/2006   3       0
  D2  1/1/2006   C001   I002       10     R3   7/1/2006   10      0
  D4  2/1/2006   C001   I002       8      R3   7/1/2006   5       3
  D3  1/1/2006   C002   I001       8      NULL    NULL    NULL    8



请问你的10是从哪里来的?我看到的只是15 -.-!!

还有那5呢?因为我就欠这两个和balance

[ 本帖最后由 max5007 于 18-9-2006 06:59 PM 编辑 ]
回复

使用道具 举报

发表于 18-9-2006 08:16 PM | 显示全部楼层
原帖由 max5007 于 18-9-2006 06:42 PM 发表



请问你的10是从哪里来的?我看到的只是15 -.-!!

还有那5呢?因为我就欠这两个和balance

15已经被拆散成10+5了,那个10就是这样来的
回复

使用道具 举报

发表于 18-9-2006 09:33 PM | 显示全部楼层
原帖由 神仙祖宗 于 18-9-2006 08:16 PM 发表

15已经被拆散成10+5了,那个10就是这样来的


怎么会被拆散?
那我的query就错了-.-!!
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


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

GMT+8, 14-11-2024 09:07 PM , Processed in 0.114084 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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