关于视图的另一问题,高手再请进!

zhuchengtao 2008-12-16 11:24:41
有三个表A、B和C
A表:
编码
1
2
3
+1+2

B表:
时间
2008-1-1

C表:
站号 时间 数据
1 2008-1-1 100
1 2008-1-2 200
2 2008-1-1 200
2 2008-1-2 300
3 2008-1-1 400
...

现在需要建立一个视图D,需要找出对应时间和编码的数据
视图D
编码 时间 数据
1 2008-1-1 100
2 2008-1-1 200
3 2008-1-1 400
+1+2 2008-1-1 300

其中编码+1+2是要实现站号1对应时间的数据100和站号2对应时间的数据200相加得300,其中的数据只是简单举例,实际数据是动态变化的。

不知视图语句应该怎么写,请高手指点!
...全文
124 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuifengde 2008-12-16
  • 打赏
  • 举报
回复
DECLARE @a table(bm varchar(20))  
INSERT @a SELECT '1'
UNION ALL SELECT '2'
UNION ALL SELECT '3'
UNION ALL SELECT '+1+2'

DECLARE @b table(sj varchar(20))
INSERT @b SELECT '2008-1-1'
declare @c table(zh varchar(20),sj varchar(20),sjj int)
INSERT @c SELECT '1' ,'2008-1-1' ,100
UNION ALL SELECT '1' ,'2008-1-2', 200
UNION ALL SELECT '2' ,'2008-1-1', 200
UNION ALL SELECT '2' ,'2008-1-2', 300
UNION ALL SELECT '3' ,'2008-1-1', 400

SELECT bm,aa.sj,sjj=isnull(sjj,(SELECT sum(sjj) FROM @c WHERE sj=aa.sj AND charindex('+'+zh+'+',bm+'+')>0))
from
(SELECT * FROM @a a CROSS JOIN @b b)aa
LEFT JOIN
@c cc
ON bm=zh AND aa.sj=cc.sj


--result
/*bm sj sjj
-------------------- -------------------- -----------
1 2008-1-1 100
2 2008-1-1 200
3 2008-1-1 400
+1+2 2008-1-1 300

(所影响的行数为 4 行)
*/
zhuchengtao 2008-12-16
  • 打赏
  • 举报
回复
兄弟们帮帮忙,'+1+2'哪怕写成1和2的死公式计算都行
zhuchengtao 2008-12-16
  • 打赏
  • 举报
回复
B表里面的时间只会有一个,编码只会存在加法计算,不会有其他形式
dawugui 2008-12-16
  • 打赏
  • 举报
回复
'+1+2'
如果存在这样的编码,基本没法做.友情帮顶.
百年树人 2008-12-16
  • 打赏
  • 举报
回复
……
union all
select '+1+2',时间,sum(数据) as 数据 where 编码 in(1,2) group by 时间
水族杰纶 2008-12-16
  • 打赏
  • 举报
回复
?
冷箫轻笛 2008-12-16
  • 打赏
  • 举报
回复
+1+2 也是一个编码吗?

那是否此类编码只有+?没有减乘除?
liangCK 2008-12-16
  • 打赏
  • 举报
回复
B表有多个时间记录的时候..请问你的A表的编码是对应哪个时间?.
zhuchengtao 2008-12-16
  • 打赏
  • 举报
回复
已改变设计思路,通过创建多个视图然后组合的方法实现原目标。
谢谢各位了!
hery2002 2008-12-16
  • 打赏
  • 举报
回复
9楼的应该是个方法,没有验证对不对,
不过,xQuery这条路应该是走的通的.
--------------------------------
xQuery中其中很重要的一个应用就是同组合并,
楼主是按照日期来分组的,
编号中使用加号'+'连接,
后面的数量使用SUM求和.
chuifengde 2008-12-16
  • 打赏
  • 举报
回复
把select语句中@a,@b,@c改成你相应的表测试一下就行了,这三个declare是我定义的表
may_05 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 may_05 的回复:]
引用 12 楼 zhuchengtao 的回复:
chuifengde,为什么会有“查询设计器不支持 DECLARE TABLE SQL 构造”提示?

declare table SQL在存储过程中可用.在视图中不可用.
[/Quote]

汗......我都没仔细看....chuifengde是用这些语句先创建你那几张表的.
你弄的时候不要弄它上面那些创建表的语句....
may_05 2008-12-16
  • 打赏
  • 举报
回复
select A.编码,B.时间,sum(C.数据) as 数据 from A 
left outer join B on 1=1
left outer join C on A.编码 like '%'+C.站号+'%' and C.时间=B.时间 group by A.编码,B.时间
zhuchengtao 2008-12-16
  • 打赏
  • 举报
回复
最多只有两项相加。C表中同一时间和同一编码只会有一条记录。
may_05 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhuchengtao 的回复:]
chuifengde,为什么会有“查询设计器不支持 DECLARE TABLE SQL 构造”提示?
[/Quote]
declare table SQL在存储过程中可用.在视图中不可用.
may_05 2008-12-16
  • 打赏
  • 举报
回复
问下除了有+1+2的情况会有会有+1+2+3这样的情况???最多只会两个相加?
而C表中同一个时间,同一编码.也就是2008-1-1这一天编码为1的只会有一条记录吗?
zhuchengtao 2008-12-16
  • 打赏
  • 举报
回复
chuifengde,为什么会有“查询设计器不支持 DECLARE TABLE SQL 构造”提示?
zhuchengtao 2008-12-16
  • 打赏
  • 举报
回复
chuifengde,为什么会有“查询设计器不支持 DECLARE TABLE SQL 构造”提示?
zhuchengtao 2008-12-16
  • 打赏
  • 举报
回复
继续顶
nalnait 2008-12-16
  • 打赏
  • 举报
回复

--TRY::
CREATE TABLE XX(A VARCHAR(300))
INSERT INTO XX
SELECT '1' UNION ALL
SELECT '2' UNION ALL
SELECT '3' UNION ALL
SELECT '+1+2'

CREATE TABLE YY(B DATETIME)
INSERT INTO YY VALUES('2008-01-01')

CREATE TABLE ZZ(C VARCHAR(20),B DATETIME,DATA INT)
INSERT INTO ZZ
SELECT '1','2008-01-01',100 UNION ALL
SELECT '1','2008-01-02',200 UNION ALL
SELECT '2','2008-01-01',200 UNION ALL
SELECT '2','2008-01-02',300 UNION ALL
SELECT '3','2008-01-01',400

CREATE VIEW V_X
AS
SELECT xxtable.TT,YY.B,SUM(ZZ.DATA)MM FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY GETDATE()) TT,CAST(replace((CASE WHEN LEFT(A,1)<>'+' THEN '<r>'+A ELSE
stuff(a,1,1,'<r>') END+'</r>'),'+','</r><r>')AS XML) col FROM XX ) xxtable
CROSS APPLY
(SELECT V=t.col.value('.','VARCHAR(10)') FROM xxtable.col.nodes('//r') AS t(col)
) b,YY,ZZ WHERE B.V=ZZ.C AND YY.B=ZZ.B
GROUP BY xxtable.TT,YY.B

SELECT * FROM V_X



34,591

社区成员

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

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