本人很菜..
表:A 字段: ID , sfhx
值 1 , 0
值 2 , 0
值 3 , 1表:B(A的子表ID) 字段: ID , NAME , HEAD , COUNT
值 1 , 名称1 , H1 100
值 1 , 名称1 , H1 100
值 1 , 名称1 , H2 50
值 2 , 名称2 , H1 100
值 2 , 名称2 , H2 80
值 3 , 名称2 , H1 50
表:C 字段: CID , NAME , HEAD , COUNT , sfhx
值 1 , 名称1 , H1 50 , 0
值 1 , 名称1 , H2 40 , 0
值 2 , 名称2 , H1 50 , 0
值 2 , 名称2 , H1 50 , 1
================================================================================
Select * from B where id in (select id from A where sfhx=0)查询结果: 字段: ID , NAME , HEAD , COUNT
值 1 , 名称1 , H1 100
值 1 , 名称1 , H1 100
值 1 , 名称1 , H2 50
值 2 , 名称2 , H1 100
值 2 , 名称2 , H2 80
Select * from C 查询结果: 字段: CID , NAME , HEAD , COUNT , sfhx
值 1 , 名称1 , H1 50 , 0
值 1 , 名称1 , H2 40 , 0
值 2 , 名称2 , H1 50 , 0
=============================================================
这个查询结果是错误的
Select B.NAME , B.HEAD ,B. COUNT AS BC, A. COUNT AS AC from A,B
WHERE B. id in (select id from A where sfhx=0)
AND B.NAME=A. NAME
AND B.HEAD =A.HEAD
AND C.sfhx=0
Group by B.NAME , B.HEAD /这个查询结果是错误的===========================================================
我现在想要的结果是:
查询结果: 字段: NAME , HEAD , AC , BC
值 名称1 , H1 200 50
值 名称1 , H2 50 40
值 名称2 , H1 100 50
值 名称2 , H2 80
====================================================================请问,,我想要这个结果,这条SQL语句我改怎样写..
其实可以把表C拆开,成两个表,,表A和表B就是一个拆开的表..希望大家能理解我的意思
但是,,现在只能这样,,不能改动这三个表,,却要求我想要的结果
这句SQL要怎么写,,
分不够再加...
表:A 字段: ID , sfhx
值 1 , 0
值 2 , 0
值 3 , 1表:B(A的子表ID) 字段: ID , NAME , HEAD , COUNT
值 1 , 名称1 , H1 100
值 1 , 名称1 , H1 100
值 1 , 名称1 , H2 50
值 2 , 名称2 , H1 100
值 2 , 名称2 , H2 80
值 3 , 名称2 , H1 50
表:C 字段: CID , NAME , HEAD , COUNT , sfhx
值 1 , 名称1 , H1 50 , 0
值 1 , 名称1 , H2 40 , 0
值 2 , 名称2 , H1 50 , 0
值 2 , 名称2 , H1 50 , 1
================================================================================
Select * from B where id in (select id from A where sfhx=0)查询结果: 字段: ID , NAME , HEAD , COUNT
值 1 , 名称1 , H1 100
值 1 , 名称1 , H1 100
值 1 , 名称1 , H2 50
值 2 , 名称2 , H1 100
值 2 , 名称2 , H2 80
Select * from C 查询结果: 字段: CID , NAME , HEAD , COUNT , sfhx
值 1 , 名称1 , H1 50 , 0
值 1 , 名称1 , H2 40 , 0
值 2 , 名称2 , H1 50 , 0
=============================================================
这个查询结果是错误的
Select B.NAME , B.HEAD ,B. COUNT AS BC, A. COUNT AS AC from A,B
WHERE B. id in (select id from A where sfhx=0)
AND B.NAME=A. NAME
AND B.HEAD =A.HEAD
AND C.sfhx=0
Group by B.NAME , B.HEAD /这个查询结果是错误的===========================================================
我现在想要的结果是:
查询结果: 字段: NAME , HEAD , AC , BC
值 名称1 , H1 200 50
值 名称1 , H2 50 40
值 名称2 , H1 100 50
值 名称2 , H2 80
====================================================================请问,,我想要这个结果,这条SQL语句我改怎样写..
其实可以把表C拆开,成两个表,,表A和表B就是一个拆开的表..希望大家能理解我的意思
但是,,现在只能这样,,不能改动这三个表,,却要求我想要的结果
这句SQL要怎么写,,
分不够再加...
解决方案 »
- 如何取分组统计中的第一条记录?
- 请叫大数据量表结构设计
- 请ai_li7758521、sql77、lingling1989r进来接分3
- 怎样把一列的数据转换为多列的数据?
- 郁闷!进程总也杀不死,急!!!!
- 如何利用存储查询跨月数据(前提是每个月的数据都在一个月表里,如6月数据在sale200806,7月数据在sale200807,当前数据在sale)
- UPDATE 中使用CASE语句的问题
- 如何把一个用char*中存放的二进制数据放到数据库中,然后,如何从数据库中获取出来二进制数据到char*中?
- exec sql set isolation to dirty read? 我在介绍SQL语言的书中找不到相关内容,也不理解这是什么意思?
- 将 varchar 值 ',1,2,' 转换为数据类型为 int 的列时发生语法错误。
- 求高手,,一条SQL语句
- 能不能人工指定个值,插入到timestamp类型的列中??
表:A 字段: ID , sfhx
值 1 , 0
值 2 , 0
值 3 , 1 表:B(A的子表ID) 字段: ID , NAME , HEAD , COUNT
值 1 , 名称1 , H1 100
值 1 , 名称1 , H1 100
值 1 , 名称1 , H2 50
值 2 , 名称2 , H1 100
值 2 , 名称2 , H2 80
值 3 , 名称2 , H1 50
表:C 字段: CID , NAME , HEAD , COUNT , sfhx
值 1 , 名称1 , H1 50 , 0
值 1 , 名称1 , H2 40 , 0
值 2 , 名称2 , H1 50 , 0
值 2 , 名称2 , H1 50 , 1
================================================================================
Select * from B where id in (select id from A where sfhx=0) 查询结果: 字段: ID , NAME , HEAD , COUNT
值 1 , 名称1 , H1 100
值 1 , 名称1 , H1 100
值 1 , 名称1 , H2 50
值 2 , 名称2 , H1 100
值 2 , 名称2 , H2 80
Select * from C 查询结果: 字段: CID , NAME , HEAD , COUNT , sfhx
值 1 , 名称1 , H1 , 50 , 0
值 1 , 名称1 , H2 , 40 , 0
值 2 , 名称2 , H1 , 50 , 0
=============================================================
这个查询结果是错误的
Select B.NAME, B.HEAD ,B.COUNT AS BC, A.COUNT AS AC from A,B
WHERE B.id in (select id from A where sfhx=0)
AND B.NAME=A.NAME
AND B.HEAD=A.HEAD
AND C.sfhx=0
Group by B.NAME,B.HEAD /这个查询结果是错误的 ===========================================================
我现在想要的结果是:
查询结果: 字段: NAME , HEAD , AC , BC
值 名称1 , H1 , 200 , 50
值 名称1 , H2 , 50 , 40
值 名称2 , H1 100 , 50
值 名称2 , H2 80 , 0
==================================================================== 请问,,我想要这个结果,这条SQL语句我改怎样写..
其实可以把表C拆开,成两个表,,表A和表B就是一个拆开的表..希望大家能理解我的意思
但是,,现在只能这样,,不能改动这三个表,,却要求我想要的结果
这句SQL要怎么写,,
分不够再加...
SELECT T.NAME,T.HEAD,T.[COUNT] AS BC,T1.[COUNT] AS ACFROM A JOIN (SELECT ID,NAME,HEAD,SUM([COUNT]) AS [COUNT] FROM B GROUP BY ID,NAME,HEAD) AS T
ON A.ID=T.IDJOIN (SELECT CID,NAME,HEAD,SUM([COUNT]) AS [COUNT] FROM C GROUP BY CID,NAME,HEAD) AS T1
ON A.ID=T1.ID WHERE A.sfhx=0
试试
(
SELECT ID,NAME,HEAD,SUM([COUNT]) AS [COUNT]
FROM B WHERE ID IN ( SELECT ID FROM A WHERE sfhx=0)
GROUP BY ID,NAME,HEAD ) AS TLEFT JOIN (SELECT CID,NAME,HEAD,SUM([COUNT]) AS [COUNT]
FROM C WHERE ID IN ( SELECT ID FROM A WHERE sfhx=0)
GROUP BY CID,NAME,HEAD )AS T1ON T.NAME=T1.NAME AND T.HEAD=T1.HEAD
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================IF OBJECT_ID('a') IS NOT NULL
DROP TABLE a
GO
CREATE TABLE a(ID int,sfhx int )
go
insert a SELECT 1,0
UNION ALL SELECT 2,0
UNION ALL SELECT 3,1
go
IF OBJECT_ID('b') IS NOT NULL
DROP TABLE b
GO
CREATE TABLE b(ID int,name varchar(10),head varchar(10),count int )
go
insert b SELECT
1 , '名称1' , 'H1' , 100 union all select
1 , '名称1' , 'H1' , 100 union all select
1 , '名称1' , 'H2' , 50 union all select
2 , '名称2' , 'H1' , 100 union all select
2 , '名称2' , 'H2' , 80 union all select
3 , '名称2' , 'H1' , 50
go
IF OBJECT_ID('c') IS NOT NULL
DROP TABLE c
GO
CREATE TABLE c(cID int,name varchar(10),head varchar(10),count int,sfhx int )
go
insert c SELECT
1 , '名称1' , 'H1' , 50 , 0 union all select
1 , '名称1' , 'H2' , 40 , 0 union all select
2 , '名称2' , 'H1' , 50 , 0 union all select
2 , '名称2' , 'H1' , 50 , 1
go
select distinct t.name,t.head,AC=t.count,BC=isnull(c.count,0)
from (select name,ID,head,SUM(COUNT) as count from b group by name,ID,head) t
join a on a.ID=t.ID left join c on t.id=c.cID and t.name=c.name and t.head=c.head
where a.sfhx=0
/*------------
name head AC BC
---------- ---------- ----------- -----------
名称1 H1 200 50
名称1 H2 50 40
名称2 H1 100 50
名称2 H2 80 0
-------*/
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================IF OBJECT_ID('a') IS NOT NULL
DROP TABLE a
GO
CREATE TABLE a(ID int,sfhx int )
go
insert a SELECT 1,0
UNION ALL SELECT 2,0
UNION ALL SELECT 3,1
go
IF OBJECT_ID('b') IS NOT NULL
DROP TABLE b
GO
CREATE TABLE b(ID int,name varchar(10),head varchar(10),count int )
go
insert b SELECT
1 , '名称1' , 'H1' , 100 union all select
1 , '名称1' , 'H1' , 100 union all select
1 , '名称1' , 'H2' , 50 union all select
2 , '名称2' , 'H1' , 100 union all select
2 , '名称2' , 'H2' , 80 union all select
3 , '名称2' , 'H1' , 50
go
IF OBJECT_ID('c') IS NOT NULL
DROP TABLE c
GO
CREATE TABLE c(cID int,name varchar(10),head varchar(10),count int,sfhx int )
go
insert c SELECT
1 , '名称1' , 'H1' , 50 , 0 union all select
1 , '名称1' , 'H2' , 40 , 0 union all select
2 , '名称2' , 'H1' , 50 , 0 union all select
2 , '名称2' , 'H1' , 50 , 1
go
select distinct t.name,t.head,AC=isnull(t.count,0),BC=isnull(c.count,0)
from (select name,ID,head,SUM(COUNT) as count from b group by name,ID,head) t
join a on a.ID=t.ID left join c on t.id=c.cID and t.name=c.name and t.head=c.head
where a.sfhx=0
/*------------
name head AC BC
---------- ---------- ----------- -----------
名称1 H1 200 50
名称1 H2 50 40
名称2 H1 100 50
名称2 H2 80 0
-------*/
DROP TABLE a
GO
CREATE TABLE a(ID int,sfhx int )
go
insert a SELECT 1,0
UNION ALL SELECT 2,0
UNION ALL SELECT 3,1
go
IF OBJECT_ID('b') IS NOT NULL
DROP TABLE b
GO
CREATE TABLE b(ID int,name varchar(10),head varchar(10),count int )
go
insert b SELECT
1 , '名称1' , 'H1' , 100 union all select
1 , '名称1' , 'H1' , 100 union all select
1 , '名称1' , 'H2' , 50 union all select
2 , '名称2' , 'H1' , 100 union all select
2 , '名称2' , 'H2' , 80 union all select
3 , '名称2' , 'H1' , 50
go
IF OBJECT_ID('c') IS NOT NULL
DROP TABLE c
GO
CREATE TABLE c(cID int,name varchar(10),head varchar(10),count int,sfhx int )
go
insert c SELECT
1 , '名称1' , 'H1' , 50 , 0 union all select
1 , '名称1' , 'H2' , 40 , 0 union all select
2 , '名称2' , 'H1' , 50 , 0 SELECT T.NAME,T.HEAD,T.[COUNT] AS AC,ISNULL(T1.[COUNT],0) AS BCFROM
(
SELECT ID,NAME,HEAD,SUM([COUNT]) AS [COUNT]
FROM B WHERE ID IN ( SELECT ID FROM A WHERE sfhx=0)
GROUP BY ID,NAME,HEAD ) AS TLEFT JOIN (SELECT CID,NAME,HEAD,SUM([COUNT]) AS [COUNT]
FROM C WHERE CID IN ( SELECT ID FROM A WHERE sfhx=0)
GROUP BY CID,NAME,HEAD )AS T1ON T.ID=T1.CID ANDT.NAME=T1.NAME AND T.HEAD=T1.HEADNAME HEAD AC BC
---------- ---------- ----------- -----------
名称1 H1 200 50
名称1 H2 50 40
名称2 H1 100 50
名称2 H2 80 0(所影响的行数为 4 行)
insert @a select 1,0
insert @a select 2,0
insert @a select 3,1 declare @b table(ID int,NAME nvarchar(10),HEAD varchar(10),[COUNT] int)
insert @b select 1 , N'名称1' , 'H1' , 100
insert @b select 1 , N'名称1' , 'H1' , 100
insert @b select 1 , N'名称1' , 'H2' , 50
insert @b select 2 , N'名称2' , 'H1' , 100
insert @b select 2 , N'名称2' , 'H2' , 80
insert @b select 3 , N'名称2' , 'H1' , 50 declare @c table(CID int,NAME nvarchar(10),HEAD varchar(10),[COUNT] int,sfhx bit)
insert @c select 1 , N'名称1' , 'H1' , 50 , 0
insert @c select 1 , N'名称1' , 'H2' , 40 , 0
insert @c select 2 , N'名称2' , 'H1' , 50 , 0
insert @c select 2 , N'名称2' , 'H2' , 50 , 1 select b.name,b.head,ac=b.[count],bc=isnull(c.count,0) from @a a
left join (select id,name,head,[count]=sum([count]) from @b group by id,name,head) b on a.id=b.id
left join @c c on b.id=c.cid and b.name=c.name and b.head=c.head and c.sfhx=0
where a.sfhx=0 /*
name head ac bc
---------- ---------- ----------- -----------
名称1 H1 200 50
名称1 H2 50 40
名称2 H1 100 50
名称2 H2 80 0(所影响的行数为 4 行)
*/