mysql - 我遇到问题的 sql 分组

标签 mysql sql sql-server group-by

我正在将一个项目从 MySQL 迁移到 MSSQL。由于我在 Mssql 端有非标准的分组使用,因此我无法调出正确的数据。我需要一个建议。


SELECT Count(*) AS stok_adet, s.*, m.*,d.*
FROM stok AS s 
CROSS JOIN mermer_cins AS m 
JOIN stok_durum AS d 
ON s.stok_durum_id = d.stok_durum_id 
WHERE  m.mermer_cins_id = '5' 
AND s.blok_no = 'M6320' 
GROUP BY s.bundle_no, 
s.boy, 
s.yukseklik, 
s.hatali 
ORDER BY s.blok_no ASC, 
s.bundle_no ASC, 
s.stok_tarih DESC 

Mysql结果ss:https://i.ibb.co/ssknfwM/mysql.png

<小时/>

我在 Mssql 端尝试了两种不同的方法。

SELECT COUNT(*) as stok_adet,
       s.bundle_no, s.boy, s.yukseklik, s.hatali
FROM stok s CROSS JOIN
     mermer_cins m JOIN
     stok_durum d
     ON s.stok_durum_id = d.stok_durum_id
WHERE m.mermer_cins_id = '5' AND s.blok_no = 'M6320'
GROUP BY s.bundle_no, s.boy, s.yukseklik, s.hatali;

Mssql 第一个结果 ss: https://i.ibb.co/d5wxcD7/mssql-first.png

SELECT s.*, m.*,
       (SELECT COUNT(*)
        FROM stok_durum d
        WHERE s.stok_durum_id = d.stok_durum_id
       ) as stok_adet
FROM stok s CROSS JOIN
     mermer_cins m
WHERE m.mermer_cins_id='5' AND s.blok_no='M6320'
ORDER BY s.blok_no ASC, s.bundle_no ASC, s.stok_tarih DESC

Mssql第二个结果ss:https://i.ibb.co/cY2cvMS/mssql-second.png

最佳答案

另一种选择:

SELECT sm.*,
       (SELECT COUNT(*)
        FROM stok_durum d
        WHERE sm.stok_durum_id = sm.stok_durum_id
       ) as stok_adet
FROM (SELECT s.*, m.*,
             ROW_NUMBER() OVER (PARTITION BY s.bundle_no, s.boy, s.yukseklik, s.hatali 
                                ORDER BY (SELECT NULL)
                               ) as seqnum
      FROM stok s CROSS JOIN 
           mermer_cins m 
      WHERE  m.mermer_cins_id = '5' AND s.blok_no = 'M6320' 
     ) sm
WHERE sequm = 1 
ORDER BY sm.blok_no ASC, sm.bundle_no ASC, sm.stok_tarih DESC 

子查询使用窗口函数来选择任意匹配行。

关于mysql - 我遇到问题的 sql 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57376902/

相关文章:

php - 试图获得非对象的属性

mysql - 如何提示要在 MySQL 选择查询中使用的索引?

SQL Count 年的星期一星期二等

java - 在 JOOQ 中动态构建条件

sql-server - 从 Management Studio 隐藏 SQL 数据库

sql - 如何检索匹配的单词文本搜索

php - 基于动态配置文件的网站也有硬链接(hard link)?

MySQL 带有 CASE WHEN、INNER JOIN 和 GROUP BY1 的多重 SELECT 查询

sql - 从 MAX() 查询中获取相关字段

php - 在 mysql 或 sql server 中连接三个具有循环关系的表