行者-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条)

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容