我有两个表Say-A和table-B
表-A
Userid | Date
|
101 | 15 Aug ,2011
102 | 15 Aug ,2011
103 | 16 Aug ,2011
104 | 16 Aug ,2011
105 | 17 Aug ,2011
表-B
Userid(f.k) | sts
101 | x
102 | y
101 | z
103 | x
101 | y
必需的输出是
表-C 我希望表c输出为 DAte,Total,Sts为X,Sts为y,平均值为
Date | Total | Sts (if=x) |Sts (if=y) |Avg (Total/2)
15 Aug| 20 | 15 |5 |10
16aug | 30 | 22 |8 |15
我尝试使用:
select Date, select case when [Tasble-B].Sts='x' Then 0 else 1 END as StsX,select case when [Tasble-B].Sts='Y' Then 0 else 1 END as StsY,Total/2
from
Table-A
inner join Table-B on Table-A.UserID = Table-B.UserID
b group by RegDate
我收到错误,我被这个查询困住了。请帮助 提前致谢
答案 0 :(得分:2)
select Date,
select case when [Tasble-B].Sts='x' Then 0
else 1
END as StsX,
select case when [Tasble-B].Sts='Y' Then 0
else 1
END as StsY,
Total/2
from Table-A
inner join Table-B
on Table-A.UserID = Table-B.UserID
b group by RegDate
group by RegDate
因此我认为您应该在字段列表中使用RegDate
而不是Date
或RegDate as Date
。count(*) as Total
select case ...
语句不应该是选择,而是sum(case ...)
Total/2
,Total
来自哪里?我的猜测是你想要StsX
和StsY
的平均值,但它也可能意味着你想要使用计算出的Total
列并将其除以2.如果是这样的话你就是需要重复您的汇总语句count(*)/2
,或者您可以将整个查询用作子查询,并使用Total
字段进行计算,Total/2
。[Table-B]
。b
子句之前有一个额外的group by
。你应该删除它。`
答案 1 :(得分:1)
你可以尝试:
select [Date],
(SUM(case when B.Sts='x' Then 1
else 0
END) +
SUM( case when B.Sts='Y' Then 1
else 0
END)) AS Total,
SUM( case when B.Sts='x' Then 1
else 0
END) AS StsX,
SUM( case when B.Sts='Y' Then 1
else 0
END) as StsY,
(SUM(case when B.Sts='x' Then 1
else 0
END) +
SUM( case when B.Sts='Y' Then 1
else 0
END))
/2.0 AS Average
from A
inner join B
on A.UserID = B.UserID
group by [Date]
我测试了它:
WITH A (UserId, [Date]) AS (
SELECT 101, '2011-08-15'
UNION
SELECT 102, '2011-08-15'
UNION
SELECT 103, '2011-08-16'
UNION
SELECT 104, '2011-08-16'
UNION
SELECT 105, '2011-08-17'
),
B (UserId, sts) AS
(
SELECT 101, 'x'
UNION
SELECT 102, 'y'
UNION
SELECT 101, 'z'
UNION
SELECT 103, 'x'
UNION
SELECT 101, 'y'
)
select [Date],
(SUM(case when B.Sts='x' Then 1
else 0
END) +
SUM( case when B.Sts='Y' Then 1
else 0
END)) AS Total,
SUM( case when B.Sts='x' Then 1
else 0
END) AS StsX,
SUM( case when B.Sts='Y' Then 1
else 0
END) as StsY,
(SUM(case when B.Sts='x' Then 1
else 0
END) +
SUM( case when B.Sts='Y' Then 1
else 0
END))
/2.0 AS Average
from A
inner join B
on A.UserID = B.UserID
group by [Date]