行者-ZHS 2010-03-21 13:48
浏览 217
已采纳

如何写这样的sql语句

数据库MS SQLSERVER2000

3个表:sort,service,sales  表结构如下:

Sort(服务项目大类表):

CREATE TABLE [dbo].[Sort] (

       [SortID] [int] IDENTITY (1, 1) NOT NULL ,

       [SortName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,

       [ParentID] [int] NOT NULL ,

       [ParentName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,

       [code] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

 

Service(具体的服务项目表):

CREATE TABLE [dbo].[Service] (

       [ServiceID] [int] IDENTITY (1, 1) NOT NULL ,

       [SortID] [int] NOT NULL ,

       [ServiceName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL

) ON [PRIMARY]

 

TABLE [dbo].[Sales] (

       [ID] [int] IDENTITY (1, 1) NOT NULL ,

       [ServiceID] [int] NOT NULL ,

       [Amount] [int] NOT NULL ,

       [Total] [money] NOT NULL

) ON [PRIMARY]

 

问题:统计所有大类的销售额。

 

最终界面显示类似:

服务项目   数量   销售合计

-------------------------

出图        42344     79337.73

小片        33972     16091.25

大片        8372       33246.48

1寸片      38           27.35

2寸片      8             8.75

打印片    244         637.01

 

附:

Sort中表的记录类似:

sortID sortName parentID parentName code

------------------------------------------------------

       26    出图       -1    服务项目       101

       27    小片       26    出图              101101

       28    大片       26    出图              101102

 

       29    打印片   28    大片              101102101

       119  1寸片     27    小片              101101101

       120  2寸片     27    小片              101101102

 

Service表中的数据类似:

serviceID sortID serviceName

---------------------------------------

      439   119       1寸片

   444   124       7寸片

   445   120       2寸片

   446    121        3寸片

 

SQL语句不会写。

 

 

 

  • 写回答

8条回答

  • qwe_rt 2010-03-21 19:59
    关注

    如果统计所有的节点的销售记录,就添加第零步。
    0.取出所有的sortId,并将其作为第1步的sortId的参数

    比如要统计出图的,(一开始把出图的叶子节点和树枝节点找出来。
    然后再从中找出出图的叶子节点最后统计找出叶子节点的销售总额
    )
    1.根据出图的ID查到出图的code,
    [code="java"]select code from sort where sortId=26[/code]

    2.select 所有的code
    [code="java"] select code from sort[/code]
    3.在所有的code中取出以出图的code开头的code(这一步去取出了所有的树枝节点和叶子节点,
    都是出图的)
    [code="java"]seelct code from sort where code like '101%'[/code]

    4.用第三步的code取出对应的sortId
    [code="java"]select sortId from sort where code =第三步取出的code[/code]
    5.然后第四步取出的sortId跟Service这张表做left join,或者union,并取出serviceId就行(这时候是不是出图所有的叶子节点的ServiceID了。
    )。
    [code="java"]select * from sort as sort,service as s where sort.sortId+=s.sortId[/code]
    6.根据第五步取出的serviceid,在sales表中统计数据(这步要用到group by了)。
    [code="java"]select s.serviceId from sort as sort,service as s where sort.sortId+=s.sortId and s.sortId=第四步的sortId[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误