select case GuestName when '小计' then '小计' else GuestNumber end as GuestNumber
,case GuestName when '小计' then '' else GuestName end as GuestName
,sun_GuestMoney from(
SELECT CASE WHEN (GROUPING(GuestNumber) = 1) THEN '总计'
ELSE ISNULL(GuestNumber, 'UNKNOWN')
END AS name,
CASE WHEN (GROUPING(GuestNumber) = 1) THEN ''
when(grouping(GuestName)=1)then'小计'
ELSE ISNULL(GuestName, 'UNKNOWN')
END AS sun_GuestMoney,
SUM(GuestMoney) /*AS*/'sun_GuestMoney'
FROM OpenRoomInfo
GROUP BY GuestNumber,GuestName WITH ROLLUP )bb
go系统提示错误如下:
服务器: 消息 207,级别 16,状态 1,行 1
列名 'GuestName' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'GuestNumber' 无效。
服务器: 消息 207,级别 16,状态 1,行 2
列名 'GuestName' 无效。
服务器: 消息 207,级别 16,状态 1,行 2
列名 'GuestName' 无效。
服务器: 消息 8156,级别 16,状态 1,行 1
多次为 'bb' 指定了列 'sun_GuestMoney'。
望各位大侠给予解决!
,case GuestName when '小计' then '' else GuestName end as GuestName
,sun_GuestMoney from(
SELECT CASE WHEN (GROUPING(GuestNumber) = 1) THEN '总计'
ELSE ISNULL(GuestNumber, 'UNKNOWN')
END AS name,
CASE WHEN (GROUPING(GuestNumber) = 1) THEN ''
when(grouping(GuestName)=1)then'小计'
ELSE ISNULL(GuestName, 'UNKNOWN')
END AS sun_GuestMoney,
SUM(GuestMoney) /*AS*/'sun_GuestMoney'
FROM OpenRoomInfo
GROUP BY GuestNumber,GuestName WITH ROLLUP )bb
go系统提示错误如下:
服务器: 消息 207,级别 16,状态 1,行 1
列名 'GuestName' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'GuestNumber' 无效。
服务器: 消息 207,级别 16,状态 1,行 2
列名 'GuestName' 无效。
服务器: 消息 207,级别 16,状态 1,行 2
列名 'GuestName' 无效。
服务器: 消息 8156,级别 16,状态 1,行 1
多次为 'bb' 指定了列 'sun_GuestMoney'。
望各位大侠给予解决!
USE [MyHotelManager]
GO
/****** 对象: Table [dbo].[OpenRoomInfo] 脚本日期: 03/27/2009 12:36:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[OpenRoomInfo](
[OpenRoomId] [int] IDENTITY(1,1) NOT NULL,
[RoomId] [int] NOT NULL,
[GuestNumber] [varchar](100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[GuestName] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[GuestMoney] [money] NOT NULL,
[OpenTime] [datetime] NOT NULL DEFAULT (getdate()),
[Re] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY CLUSTERED
(
[OpenRoomId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]GO
SET ANSI_PADDING OFF
GO
USE [MyHotelManager]
GO
ALTER TABLE [dbo].[OpenRoomInfo] WITH CHECK ADD FOREIGN KEY([RoomId])
REFERENCES [dbo].[Room] ([RoomId])
case GuestName when '小计' then '小计' else GuestNumber end as GuestNumber
,case GuestName when '小计' then '' else GuestName end as GuestName
,sun_GuestMoney from(
SELECT CASE WHEN (GROUPING(GuestNumber) = 1) THEN '总计'
ELSE ISNULL(GuestNumber, 'UNKNOWN')
END AS name,
CASE WHEN (GROUPING(GuestNumber) = 1) THEN ''
when(grouping(GuestName)=1)then'小计'
ELSE ISNULL(GuestName, 'UNKNOWN')
END AS sun_GuestMoney,
SUM(GuestMoney) sun_GuestMoney_1 --这里列名与上一个重了。
FROM OpenRoomInfo
GROUP BY GuestNumber,GuestName
WITH ROLLUP
) bb
go
case GuestName when '小计' then '小计' else GuestNumber end as GuestNumber
,case GuestName when '小计' then '' else GuestName end as GuestName
,sun_GuestMoney from(
SELECT CASE WHEN (GROUPING(GuestNumber) = 1) THEN '总计'
ELSE ISNULL(GuestNumber, 'UNKNOWN')
END AS name,
CASE WHEN (GROUPING(GuestNumber) = 1) THEN ''
when(grouping(GuestName)=1)then'小计'
ELSE ISNULL(GuestName, 'UNKNOWN')
END AS sun_GuestMoney,
SUM(GuestMoney) sun_GuestMoney_1
FROM OpenRoomInfo
GROUP BY CASE WHEN (GROUPING(GuestNumber) = 1) THEN '总计'
ELSE ISNULL(GuestNumber, 'UNKNOWN')
END,
CASE WHEN (GROUPING(GuestNumber) = 1) THEN ''
when(grouping(GuestName)=1)then'小计'
ELSE ISNULL(GuestName, 'UNKNOWN')
END
WITH ROLLUP
) bb
go 这样试试
--TRY:
select case GuestName when '小计' then '小计' else GuestNumber end as GuestNumber
,case GuestName when '小计' then '' else GuestName end as GuestName
,sun_GuestMoney
from(
SELECT CASE WHEN (GROUPING(GuestNumber) = 1) THEN '总计'
ELSE ISNULL(GuestNumber, 'UNKNOWN')
END AS name,
CASE WHEN (GROUPING(GuestNumber) = 1) THEN ''
when(grouping(GuestName)=1)then'小计'
ELSE ISNULL(GuestName, 'UNKNOWN')
END AS GuestName,
SUM(GuestMoney) as [sun_GuestMoney]
FROM OpenRoomInfo
GROUP BY GuestNumber,GuestName WITH ROLLUP )bb
go
RoomId int Unchecked
GuestNumber varchar(100) Unchecked
GuestName varchar(50) Unchecked
GuestMoney decimal(18, 0) Unchecked
OpenTime datetime Unchecked
Re varchar(200) Checked
测试数据:
1 1 12345 chen 200 2008-9-1 8:54:06 才来的
2 2 54321 elva 200 2008-9-1 8:54:06 才来的
3 4 45678 jay 300 2008-9-2 8:54:06 才来的
4 5 78945 lele 400 2008-9-2 8:54:06 才来的
5 9 65487 aaaa 400 2008-9-3 8:54:06 才来的
6 10 32158 bbbb 500 2008-9-3 8:54:06 才来的
7 15 98789 cccc 500 2008-9-4 8:54:06 才来的
8 19 58256 dddd 800 2008-9-4 8:54:06 才来的
9 21 96965 eeee 1000 2008-9-5 8:54:06 不晓得
10 3 51235 kkkk 500 2008-9-5 9:29:09 已退想要的结果:
2008-9-1 8:54:06 chen 200
2008-9-1 8:54:06 elva 200
小计 400
2008-9-2 8:54:06 jay 200
2008-9-2 8:54:06 lele 300
小计 500
2008-9-3 8:54:06 aaaa 400
2008-9-3 8:54:06 bbbb 500
小计 900
总计 1800
[OpenRoomId] [int] IDENTITY(1,1) NOT NULL,
[RoomId] [int] NOT NULL,
[GuestNumber] [varchar](100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[GuestName] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[GuestMoney] [money] NOT NULL,
[OpenTime] [datetime] NOT NULL DEFAULT (getdate()),
[Re] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL
)insert OpenRoomInfo
select 1,12345,'chen',200,'2008-9-1 8:54:06','才来的' union all
select 2,54321,'elva',200,'2008-9-1 8:54:06','才来的' union all
select 4,45678,'jay',300,'2008-9-2 8:54:06','才来的' union all
select 5,78945,'lele',400,'2008-9-2 8:54:06','才来的' union all
select 9,65487,'aaaa',400,'2008-9-3 8:54:06','才来的' union all
select 10,32158,'bbbb',500,'2008-9-3 8:54:06','才来的' union all
select 15,98789,'cccc',500,'2008-9-4 8:54:06','才来的' union all
select 19,58256,'dddd',800,'2008-9-4 8:54:06','才来的' union all
select 21,96965,'eeee',1000,'2008-9-5 8:54:06','不晓得' union all
select 3,51235,'kkkk',500,'2008-9-5 9:29:09','已退'select
isnull(convert(char(19),OpenTime,120),'总计') as [OpenTime],
isnull(GuestName,'小计') as [GuestName],
sum(GuestMoney) as [GuestMoney]
from OpenRoomInfo
where OpenTime<'2008-09-04'
group by OpenTime,GuestName
with rollupdrop table OpenRoomInfo/**
OpenTime GuestName GuestMoney
------------------- -------------------------------------------------- ---------------------
2008-09-01 08:54:06 chen 200.0000
2008-09-01 08:54:06 elva 200.0000
2008-09-01 08:54:06 小计 400.0000
2008-09-02 08:54:06 jay 300.0000
2008-09-02 08:54:06 lele 400.0000
2008-09-02 08:54:06 小计 700.0000
2008-09-03 08:54:06 aaaa 400.0000
2008-09-03 08:54:06 bbbb 500.0000
2008-09-03 08:54:06 小计 900.0000
总计 小计 2000.0000(所影响的行数为 10 行)
**/
看看这个格式不是你想要的?
select
case when len(guestname)=0 and OpenTime<>'总计' then '小计' else OpenTime end as [OpenTime],
GuestName,
GuestMoney
from
(
select
isnull(convert(char(19),OpenTime,120),'总计') as [OpenTime],
isnull(GuestName,' ') as [GuestName],
sum(GuestMoney) as [GuestMoney]
from OpenRoomInfo
where OpenTime<'2008-09-04'
group by OpenTime,GuestName
with rollup) tdrop table OpenRoomInfo/**
OpenTime GuestName GuestMoney
------------------- -------------------------------------------------- ---------------------
2008-09-01 08:54:06 chen 200.0000
2008-09-01 08:54:06 elva 200.0000
小计 400.0000
2008-09-02 08:54:06 jay 300.0000
2008-09-02 08:54:06 lele 400.0000
小计 700.0000
2008-09-03 08:54:06 aaaa 400.0000
2008-09-03 08:54:06 bbbb 500.0000
小计 900.0000
总计 2000.0000(所影响的行数为 10 行)
**/
select case bb.GuestName when '小计' then '小计' else bb.GuestNumber end as GuestNumber
,case bb.GuestName when '小计' then '' else bb.GuestName end as GuestName
,sun_GuestMoney from(
SELECT CASE WHEN (GROUPING(GuestNumber) = 1) THEN '总计'
ELSE ISNULL(GuestNumber, 'UNKNOWN')
END AS name,
CASE WHEN (GROUPING(GuestNumber) = 1) THEN ''
when(grouping(GuestName)=1)then'小计'
ELSE ISNULL(GuestName, 'UNKNOWN')
END AS sun_GuestMoney,
SUM(GuestMoney) /*AS*/'sun_GuestMoney1'
FROM OpenRoomInfo
GROUP BY GuestNumber,GuestName WITH ROLLUP )bb
go
WHEN (GROUPING(GuestNumber) = 1) THEN
'总计'
ELSE
ISNULL(GuestNumber, 'UNKNOWN')
END AS name,
CASE
WHEN (GROUPING(GuestNumber) = 1) THEN
''
when (grouping(GuestName) = 1) THEN
'小计'
ELSE
ISNULL(GuestName, 'UNKNOWN')
END AS sun_GuestMoney,
SUM(GuestMoney) 'sun_GuestMoney'
FROM OpenRoomInfo
GROUP BY GuestNumber, GuestName WITH ROLLUP)
这是你内层查询获得内容 并自定义了名为 bb 就相当于这些字段在一个bb的表里那么外层再查询字段 就要加上你自定义的名称 不然就会找不到字段的select case bb.GuestName
when '小计' then
'小计'
else
bb.GuestNumber
end as GuestNumber,
case bb.GuestName
when '小计' then
''
else
bb.GuestName
end as GuestName,
bb.sun_GuestMoney
from (SELECT CASE
WHEN (GROUPING(GuestNumber) = 1) THEN
'总计'
ELSE
ISNULL(GuestNumber, 'UNKNOWN')
END AS name,
CASE
WHEN (GROUPING(GuestNumber) = 1) THEN
''
when (grouping(GuestName) = 1) THEN
'小计'
ELSE
ISNULL(GuestName, 'UNKNOWN')
END AS sun_GuestMoney,
SUM(GuestMoney) as 'sun_GuestMoney'
FROM OpenRoomInfo
GROUP BY GuestNumber, GuestName WITH ROLLUP) bb go
解决此问题结贴!过程如下:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[GusetInfo]
@GuestTable nvarchar(100), -- 表名
@GuestNum nvarchar(50) = '*', -- 台号
@GuestNa nvarchar(100)='', -- 台名
@GuestMon int = 0 -- 台面钱数
AS
BEGIN
select case '@GuestNa' when '小计' then '小计' else '@GuestNum' end as '@GuestNum'
,case '@GuestNa' when '小计' then '' else '@GuestNa' end as '@GuestNa'
,sun_GuestMoney
from(
SELECT CASE WHEN (GROUPING('@GuestNum') = 1) THEN '总计'
ELSE ISNULL('@GuestNum', 'UNKNOWN')
END AS '@GuestNum',
CASE WHEN (GROUPING('@GuestNum') = 1) THEN ''
when(grouping('@GuestNa')=1)then'小计'
ELSE ISNULL('@GuestNa', 'UNKNOWN')
END AS '@GuestNa',
SUM('@GuestMon') as [sun_GuestMoney]
FROM @GuestTable
GROUP BY '@GuestNum','@GuestNa' WITH ROLLUP )bb
--go
end消息 1087,级别 15,状态 2,过程 GusetInfo,第 20 行
必须声明表变量 "@GuestTable"。
消息 319,级别 15,状态 1,过程 GusetInfo,第 21 行
关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾。
我就是在这段语句的基础上定义的存储过程并且声明了其中相关的输入参数,可是有语法错误,小弟水平有限,但是有分,解决结贴!
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[GusetInfo]
@GuestTable nvarchar(100), -- 表名
@GuestNum nvarchar(50) = '*', -- 台号
@GuestNa nvarchar(100)='', -- 台名
@GuestMon int = 0 -- 台面钱数
AS
DECLARE @SQL NVARCHAR(MAX)
BEGIN
SET @SQL=N'select case '+@GuestNa+' when '''小计''' then '''小计''' else ''''+@GuestNum+'''' end as '+@GuestNum+N'
,case '+@GuestNa+N' when '''小计''' then '''''' else ''''+@GuestNa+'''' end as '+@GuestNa+N'
,sun_GuestMoney
from(
SELECT CASE WHEN (GROUPING('+@GuestNum+N') = 1) THEN '''总计'''
ELSE ISNULL('+@GuestNum+N', '''UNKNOWN''')
END AS '+@GuestNum+N',
CASE WHEN (GROUPING('+@GuestNum+N') = 1) THEN ''''''
when(grouping('+@GuestNa+N')=1)then'''小计'''
ELSE ISNULL('+@GuestNa+N', '''UNKNOWN''')
END AS '+@GuestNa+N',
SUM('+@GuestMon+N') as [sun_GuestMoney]
FROM '+@GuestTable+N'
GROUP BY '+@GuestNum+N','+@GuestNa+N' WITH ROLLUP )bb
EXEC SP_SQLEXEC
--go
end
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[GusetInfo]
@GuestTable nvarchar(100), -- 表名
@GuestNum nvarchar(50) = '*', -- 台号
@GuestNa nvarchar(100)='', -- 台名
@GuestMon int = 0 -- 台面钱数
AS
DECLARE @SQL NVARCHAR(MAX)
BEGIN
SET @SQL=N'select case '+@GuestNa+' when '''小计''' then '''小计''' else ''''+@GuestNum+'''' end as '+@GuestNum+N'
,case '+@GuestNa+N' when '''小计''' then '''''' else ''''+@GuestNa+'''' end as '+@GuestNa+N'
,sun_GuestMoney
from(
SELECT CASE WHEN (GROUPING('+@GuestNum+N') = 1) THEN '''总计'''
ELSE ISNULL('+@GuestNum+N', '''UNKNOWN''')
END AS '+@GuestNum+N',
CASE WHEN (GROUPING('+@GuestNum+N') = 1) THEN ''''''
when(grouping('+@GuestNa+N')=1)then'''小计'''
ELSE ISNULL('+@GuestNa+N', '''UNKNOWN''')
END AS '+@GuestNa+N',
SUM('+@GuestMon+N') as [sun_GuestMoney]
FROM '+@GuestTable+N'
GROUP BY '+@GuestNum+N','+@GuestNa+N' WITH ROLLUP )bb
EXEC SP_SQLEXEC
--go
end
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[GusetInfo]
@GuestTable nvarchar(100), -- 表名
@GuestNum nvarchar(50) = '*', -- 台号
@GuestNa nvarchar(100)='', -- 台名
@GuestMon int = 0 -- 台面钱数
AS
DECLARE @SQL NVARCHAR(MAX)
BEGIN
SET @SQL=N'select case '+@GuestNa+' when '''小计''' then '''小计''' else ''''+@GuestNum+'''' end as '+@GuestNum+N'
,case '+@GuestNa+N' when '''小计''' then '''''' else ''''+@GuestNa+'''' end as '+@GuestNa+N'
,sun_GuestMoney
from(
SELECT CASE WHEN (GROUPING('+@GuestNum+N') = 1) THEN '''总计'''
ELSE ISNULL('+@GuestNum+N', '''UNKNOWN''')
END AS '+@GuestNum+N',
CASE WHEN (GROUPING('+@GuestNum+N') = 1) THEN ''''''
when(grouping('+@GuestNa+N')=1)then'''小计'''
ELSE ISNULL('+@GuestNa+N', '''UNKNOWN''')
END AS '+@GuestNa+N',
SUM('+@GuestMon+N') as [sun_GuestMoney]
FROM '+@GuestTable+N'
GROUP BY '+@GuestNum+N','+@GuestNa+N' WITH ROLLUP )bb
EXEC SP_SQLEXEC
--go
end
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[GusetInfo]
@GuestTable nvarchar(100), -- 表名
@GuestNum nvarchar(50) = '*', -- 台号
@GuestNa nvarchar(100)='', -- 台名
@GuestMon int = 0 -- 台面钱数
AS
BEGIN
set nocount on
declare @s varchar(8000)
set @s='select case '+@GuestNa+' when ''小计'' then ''小计'' else '+@GuestNum+' end as ['+@GuestNum +']
,case '+@GuestNa+' when ''小计'' then '''' else '+@GuestNa+' end as ['+@GuestNa+']
,sun_GuestMoney
from(
SELECT CASE WHEN (GROUPING('+@GuestNum+') = 1) THEN ''总计''
ELSE ISNULL('+@GuestNum+', ''UNKNOWN'')
END AS ['+@GuestNum+'],
CASE WHEN (GROUPING('+@GuestNum+') = 1) THEN ''''
when(grouping('+@GuestNa+')=1)then ''小计''
ELSE ISNULL('+@GuestNa+', ''UNKNOWN'')
END AS ['+@GuestNa+'],
SUM('+@GuestMon+') as [sun_GuestMoney]
FROM '+@GuestTable +'
GROUP BY '+@GuestNum+','+@GuestNa+' WITH ROLLUP ) bb'
exec(@s)
end
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[GusetInfo]
@GuestTable nvarchar(100), -- 表名
@GuestNum nvarchar(50) = '*', -- 台号
@GuestNa nvarchar(100)='', -- 台名
@GuestMon int = 0 -- 台面钱数
AS
BEGIN
set nocount on
declare @s varchar(8000)
set @s='select case '+@GuestNa+' when ''小计'' then ''小计'' else '+@GuestNum+' end as ['+@GuestNum +']
,case '+@GuestNa+' when ''小计'' then '''' else '+@GuestNa+' end as ['+@GuestNa+']
,sun_GuestMoney
from(
SELECT CASE WHEN (GROUPING('+@GuestNum+') = 1) THEN ''总计''
ELSE ISNULL('+@GuestNum+', ''UNKNOWN'')
END AS ['+@GuestNum+'],
CASE WHEN (GROUPING('+@GuestNum+') = 1) THEN ''''
when(grouping('+@GuestNa+')=1)then ''小计''
ELSE ISNULL('+@GuestNa+', ''UNKNOWN'')
END AS ['+@GuestNa+'],
SUM('+@GuestMon+') as [sun_GuestMoney]
FROM '+@GuestTable +'
GROUP BY '+@GuestNum+','+@GuestNa+' WITH ROLLUP ) bb'
exec(@s)
end 消息 208,级别 16,状态 6,过程 GusetInfo,第 24 行
对象名 'dbo.GusetInfo' 无效。
郁闷~~~~~~~~~~~~