背景:
我首先被要求做一个使用mysql作为数据库的网站,完成并发送之后,客户要求我将其转换为mssql和3层。
我做了在服务器之间传输数据的类和函数,所以3层位大约完成了一半。我现在苦苦挣扎的是MsSQL。
题:
问题的MySQL版本如下所示:
select a.id as a_id, a.first_name, a.last_name, a.agent_code,
b.id as b_id, b.user_id, b.status_admin
from tbl_user a
inner join tbl_testimonia b
on a.id = b.user_id
where b.status_admin=0
group by a.id
order by b.id desc
它所做的是将尚未批准的归还证明书归类到每个用户;
我被困在哪里:
我无法将其转换为MSSQL
我最好的尝试:
创建视图;
如:
create view test as
(
select a.id as a_id, a.first_name, a.last_name, a.agent_code,
b.id as b_id, b.user_id, b.status_admin
from tbl_user a inner join tbl_testimonia b on a.id = b.user_id
where b.status_admin=0 and a.id in
(
select a.id from tbl_user a
inner join tbl_testimonia b
on a.id = b.user_id
where b.status_admin=0
group by a.id
)
)
这将选择我想要的内容,但是无法将创建视图的id字段分组,这意味着id字段不是唯一的,并且可以具有相同的值。
我想到目前为止,我的问题是,如何在视图中唯一选择id字段?
确定我可以用PHP做到这一点,但是一个月前我第一次遇到问题时就可以做到。
我已经尝试寻找答案已有一段时间了,但似乎找不到我的问题所独有的答案
编辑:MSSQL不起作用,因为即使子查询选择唯一的ID,主查询中的in语句也会导致此irrelevent
编辑:示例输出::〜(在MySql中,第三个字段被省略)
| a_id | firstN | LastN | agent_code | b_id | user_id |status_admin|
+--------------------------------------------------------------------------+
| 32 | fn1 | ln1 | AC123213 | 14 | 32 | 0 |
| 41 | fn2 | ln2 | 12345678 | 15 | 41 | 0 |
| 32 | fn1 | ln1 | AC123213 | 16 | 32 | 0 |
编辑:问题解决了一个简单的答案给利文很大的麻烦
最佳答案
正如您自己已经解释的那样,与SQL Server不同,MySQL允许使用未聚合的表达式进行分组,例如:
SELECT *
FROM mytable
GROUP BY
column
由于GROUP BY中的未聚合表达式返回每个组中的任意记录,并且如果值变化,则不应使用该记录,您应该能够在SQL Server中将以下语句用作等效项
select a.id as a_id
, MIN(a.first_name)
, MIN(a.last_name)
, MIN(a.agent_code)
, MIN(b.id as b_id)
, MIN(b.user_id)
, MIN(b.status_admin)
from tbl_user a
inner join tbl_testimonia b on a.id = b.user_id
where b.status_admin=0
group by
a.id
order by
b.id desc