sql查询问题

qqyatou 2009-10-09 04:08:22
http://wenda.tianya.cn/wenda/thread?tid=008e40988f9b74c0
我的问题写在这里了拜托大家看看,上午csnd升级不能用就在天涯上写了。
这里面写了发表不了总说有非法词或词组很郁闷,谢谢大家
...全文
185 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenbinglan 2009-10-09
  • 打赏
  • 举报
回复
很牛叉啊
qqyatou 2009-10-09
  • 打赏
  • 举报
回复
太强了
崇拜死你们了
navy887 2009-10-09
  • 打赏
  • 举报
回复
GX
qqyatou 2009-10-09
  • 打赏
  • 举报
回复
”办 证“是非法词
都怪办 证的太猖狂了
搞的我郁闷了一天呵呵谢谢大家,
搞定了
百年树人 2009-10-09
  • 打赏
  • 举报
回复
SELECT 
ISNULL(A.feename,B.feename) AS feename,
ISNULL(A.[money],0)-ISNULL(B.[money],0) AS [money]
FROM
(SELECT * FROM TB WHERE TYPE=0) A
FULL JOIN
(SELECT * FROM TB WHERE TYPE=1) B
ON
A.feename=B.feename
水族杰纶 2009-10-09
  • 打赏
  • 举报
回复
-->Title:Generating test data
-->Author:wufeng4552
-->Date :2009-10-09 16:11:18

declare @A table([feename] nvarchar(4),[money] decimal(18,2))
Insert @A
select N'管理费',20.00 union all
select N'速递运费',600.00 union all
select N'通信费',450.00
declare @B table([feename] nvarchar(4),[money] decimal(18,2))
Insert @B
select N'办 证费',638.79 union all
select N'附加费用',107.25 union all
select N'速递运费',555.00
select [feename],sum([money])[money] from(
select [feename],[money] from @a
union all
select [feename],-[money] from @b)T
group by [feename]
/*
feename money
------- ---------------------------------------
附加费用 -107.25
通信费 450.00
速递运费 45.00
管理费 20.00
办 证费 -638.79

(5 個資料列受到影響)
*/
华夏小卒 2009-10-09
  • 打赏
  • 举报
回复
在树哥的提醒下,好不容易才把结果贴出来
华夏小卒 2009-10-09
  • 打赏
  • 举报
回复

if object_id('tb')is not null drop table tb
go
create table tb(feename nvarchar(10),[money] decimal(10,2),[TYPE] varchar(10))
insert tb select
N'管理费', 20.00, 0 union all select
N'速递运费', 600.00, 0 union all select
N'通信费' , 450.00, 0 union all select
N'办 证费', 638.79, 1 union all select
N'附加费用', 107.25, 1 union all select
N'速递运费', 555.00, 1


select a.feename,[money]=a.[money]-b.[money]
from(
select feename,[money]=sum(case when [TYPE]=0 then [money] else 0 end)
from tb group by feename
)a,
(select feename,[money]=sum(case when [TYPE]=0 then 0 else [money] end)
from tb group by feename
)b
where a.feename=b.feename


feename money
---------- ---------------------------------------
办 证费 -638.79
附加费用 -107.25
管理费 20.00
速递运费 45.00
通信费 450.00

(5 行受影响)






SQL77 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 josy 的回复:]
引用 9 楼 sql77 的回复:
引用 7 楼 josy 的回复:
SQL codeifobject_id('[应收费用]')isnotnulldroptable[应收费用]gocreatetable[应收费用]([feename]varchar(8),[money] numeric(5,2))insert[应收费用]select'管理费',20.00unionallselect'速递运费',600.00unionallselect'通信费',450.00ifob¡­

树哥怎么发的


“办 证” 中间加了个空格,说实话,这种过滤器没啥用
[/Quote]
呵呵,树哥怎么发现的呀,办 证是非法词????
百年树人 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qqyatou 的回复:]
大家理解错了
数据是从一个表里得到的每条数据有一列是表示数据类型的type如果是0表示应收费用,如果是1表示应付费用
费用类型不是固定的
[/Quote]

把完整的表结构和测试数据发出来

BTW:可以用视图查询的方法把type=0的作为a表,type=1的作为2表
SQL77 2009-10-09
  • 打赏
  • 举报
回复
DECLARE @TB1 TABLE(feename VARCHAR(10),money money)
INSERT @TB1
SELECT '管理 费' ,20.00 UNION ALL
SELECT '速递 运费', 600.00 UNION ALL
SELECT '通信费' , 450.00

DECLARE @TB2 TABLE(feename VARCHAR(10),money money)
INSERT @TB2
SELECT '办 证费' ,638.79 UNION ALL
SELECT '附加费用', 107.25 UNION ALL
SELECT '速递运费' , 555.00


SELECT ISNULL(A.feename,B.feename)feename,ISNULL(A.money,0)-ISNULL(B.money,0) AS money FROM
@TB1 A FULL JOIN @TB2 B ON A.feename=B.feename

(所影响的行数为 3 行)


(所影响的行数为 3 行)

feename money
---------- ---------------------
办 证费 -638.7900
附加费用 -107.2500
速递运费 45.0000
管理费 20.0000
通信费 450.0000

(所影响的行数为 5 行)
--小F-- 2009-10-09
  • 打赏
  • 举报
回复
要用动态??
qqyatou 2009-10-09
  • 打赏
  • 举报
回复
大家理解错了
数据是从一个表里得到的每条数据有一列是表示数据类型的type如果是0表示应收费用,如果是1表示应付费用
费用类型不是固定的
百年树人 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sql77 的回复:]
引用 7 楼 josy 的回复:
SQL codeifobject_id('[应收费用]')isnotnulldroptable[应收费用]gocreatetable[应收费用]([feename]varchar(8),[money] numeric(5,2))insert[应收费用]select'管理费',20.00unionallselect'速递运费',600.00unionallselect'通信费',450.00ifob¡­

树哥怎么发的
[/Quote]

“办 证” 中间加了个空格,说实话,这种过滤器没啥用
qqyatou 2009-10-09
  • 打赏
  • 举报
回复
费用类型不是固定的,谢谢大家
我先试下
SQL77 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 josy 的回复:]
SQL codeifobject_id('[应收费用]')isnotnulldroptable[应收费用]gocreatetable[应收费用]([feename]varchar(8),[money] numeric(5,2))insert[应收费用]select'管理费',20.00unionallselect'速递运费',600.00unionallselect'通信费',450.00ifob¡­
[/Quote]
树哥怎么发的
SQL77 2009-10-09
  • 打赏
  • 举报
回复
SELECT ISNULL(A.feename,B.feename)feename,ISNULL(A.money,0)-ISNULL(B.money,0) AS money FROM 
@TB1 A FULL JOIN @TB2 B ON A.feename=B.feename

楼主自己弄一下吧,FULL JOIN
UNION ALL都可以实现的
百年树人 2009-10-09
  • 打赏
  • 举报
回复
if object_id('[应收费用]') is not null drop table [应收费用]
go
create table [应收费用]([feename] varchar(8),[money] numeric(5,2))
insert [应收费用]
select '管理费',20.00 union all
select '速递运费',600.00 union all
select '通信费',450.00
if object_id('[应付费用]') is not null drop table [应付费用]
go
create table [应付费用]([feename] varchar(8),[money] numeric(5,2))
insert [应付费用]
select '办 证费',638.79 union all
select '附加费用',107.25 union all
select '速递运费',555.00

SELECT
ISNULL(A.feename,B.feename) AS feename,
ISNULL(A.[money],0)-ISNULL(B.[money],0) AS [money]
FROM
[应收费用] A
FULL JOIN
[应付费用] B
ON A.feename=B.feename


--测试结果:
/*
feename money
-------- ---------------------------------------
管理费 20.00
速递运费 45.00
通信费 450.00
办 证费 -638.79
附加费用 -107.25

(5 行受影响)

*/
SQL77 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 qqyatou 的回复:]
http://wenda.tianya.cn/wenda/thread?tid=008e40988f9b74c0
我的问题写在这里了拜托大家看看,上午csnd升级不能用就在天涯上写了。
这里面写了发表不了总说有非法词或词组很郁闷,谢谢大家 
[/Quote]
和你一样哦,晕
SQL77 2009-10-09
  • 打赏
  • 举报
回复
竟然发不了表结构,晕
加载更多回复(4)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧