SQL Server,根据子查询的结果从表中获取列
我有三张桌子:SQL Server,根据子查询的结果从表中获取列,sql,sql-server,database,select,group-by,Sql,Sql Server,Database,Select,Group By,我有三张桌子: Table Client { int ClientID PK varchar ClientName } Table B { varchar Luna PK int NumarI PK int ClientID FK <---- Foreign key from table Client } TABLE C { varchar Luna FK <---- Foreign
Table Client {
int ClientID PK
varchar ClientName
}
Table B {
varchar Luna PK
int NumarI PK
int ClientID FK <---- Foreign key from table Client
}
TABLE C {
varchar Luna FK <---- Foreign key from table b
int NumarI FK <---- Foreign key from table b
}
我必须从表B和C中选择每个月价格最高的账单。B和C之间的连接创建一个账单表,然后我必须检查哪个客户的账单最高。客户的名称在客户表中
这个查询为我提供了一个每月账单最高的表,但我不知道如何查询
与客户机表进行连接,以便显示所需内容
SELECT YEAR(d.Data) as an , MONTH(d.Data) as luna , max(suma) as suma
FROM TabelaB d
join (
SELECT d.NumarI , d.Luna ,sum(d1.Cantitate*d1.PretVinzare) as suma FROM TabelaB d left outer join TabelaC d1 on d.Luna = d1.Luna and d.NumarI = d1.NumarI
GROUP BY d.NumarI , d.Luna ) x on x.NumarI=d.NumarI and x.Luna = d.Luna
WHERE YEar(d.Data) >= 2012 and Year(d.Data) <= 2015
GROUP BY MONTh(d.Data ), YEAR(d.Data)
==========================================================================================
Table Client {
ClientID int PK
Name varchar
}
Table B {
varchar Luna PK
int NumarI PK
int ClientID FK <---- Foreign key from table Client
... other colums
}
TABLE C {
varchar Luna FK <---- Foreign key from table b
int NumarI FK <---- Foreign key from table b
... other colums
}
Client A left join B
ClientID Name Month NumarI ClientID DATA Price
1 X 1 123 4 3256
2 Y 1 435 4 3277
3 Z 2 145 4 8781
4 M 7 898 3 3271
4 587 2 1000
3 541 2 3267
2 658 3 9980
2 454 1 4877
Result
Name DATA Price
M 29-01-2013 3277
Z 8-02-2013 9980
Y 15-03-2013 3267
Y 18-04-2013 1000
And so on.
The idea is that I have a lots of bills in every month of the year, I have to take the highest one by month( from the join of
table A with table B ) and then add the specific client name that buyed that bill. How you understand.
你在找这样的吗
SELECT z.an , z.luna , z.suma , z.ClientName
FROM
(
SELECT YEAR(d.Data) as an , MONTH(d.Data) as luna , suma , c.ClientName ,
RANK() OVER(PARTITION BY MONTh(d.Data ), YEAR(d.Data) ORDER BY suma DESC) as [rank]
FROM TabelaB d
join (
SELECT d.NumarI , d.Luna ,sum(d1.Cantitate*d1.PretVinzare) as suma
FROM TabelaB d
left outer join TabelaC d1 on d.Luna = d1.Luna and d.NumarI = d1.NumarI
GROUP BY d.NumarI , d.Luna ) x on x.NumarI=d.NumarI and x.Luna = d.Luna
join Client c on d.ClientID = c.ClientID
WHERE YEar(d.Data) >= 2012 and Year(d.Data) <= 2015 ) z
WHERE z.[rank] = 1
如果在同一天有多张相同价格的账单,您仍然只需要一张账单-您可以用行号替换排名。请编辑您的问题并显示示例数据和所需结果。请给出表格结构并解释字段……文件名与此不相关,我只需要知道如何根据其他表的条件从表中获取特定行。谢谢,这就是我要寻找的,很棒的查询!