背景:

我首先被要求做一个使用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

10-08 10:55
查看更多