1

バックグラウンド:

最初に、データベースとして mysql を使用して Web サイトを作成するように依頼されました。それが完了して送信された後、クライアントから、それを 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でそれを行うことができますが、最初に問題に遭遇した1か月前にそれを行うことができたはずです.

私はしばらく答えを見つけようとしてきましたが、私の質問に固有の答えを見つけられないようです

  • 編集:サブクエリが一意のIDを選択しているにもかかわらず、メインクエリのinステートメントがこれを無関係にするため、MSSQLは機能しません
  • 編集: 出力例::~ (MySql では 3 番目のフィールドは省略されています)

    | 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        |
    
  • 編集:簡単な答えのためにLievenに大きな問題を解決した質問

4

2 に答える 2

1

As you have already explained yourself, unlike SQL Server, MySQL allows grouping by with unaggregated expressions like this

SELECT  *
FROM    mytable
GROUP BY
        column

As an unaggregated expression in GROUP BY returns an arbitrary record from each group and is not supposed to be used if the values vary you should be able to use the following statement as an equivalent in 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
于 2011-12-29T04:11:53.090 に答える
0

重複しないIDを使用したい場合は、次のことができます

select DISTINCT a.id from tbl_user a 
inner join tbl_testimonia b 
  on a.id = b.user_id where b.status_admin=0 

サブクエリで

于 2011-12-28T10:54:03.757 に答える