Выбрать с нестандартной группой по в пункте - PullRequest
0 голосов
/ 18 мая 2011

извините, если я заново изобрел колесо (и для моего английского тоже), и, возможно, это невозможно с простым ванильным запросом, но у меня есть "идея отсутствия", которая позволяет переместить блок строк в верхнюю часть Resulsets, я надеюсь, что этот дамп SQL (MySql) и для лучшего понимания я конвертировал это в Учетную запись и ее Валюту, возможно, было бы лучше проиллюстрировать то, что я пытаюсь, на самом деле пункт Сгруппировать с Порядком, а не моей чашкой java

DROP TABLE IF EXISTS `account`;

CREATE TABLE `account` (
  `idAccount` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `idCustomer` int(10) unsigned DEFAULT NULL,
  `idCustomerNumber` varchar(6) DEFAULT NULL,
  `AccountNumber` varchar(12) DEFAULT NULL,
  `Currency` varchar(3) DEFAULT NULL,
  PRIMARY KEY (`idAccount`)
) 

INSERT INTO `account` (`idAccount`,`idCustomer`,`idCustomerNumber`,`AccountNumber`,`Currency`) VALUES 
 (1,1,'000001','000001JPY101','JPY'),
 (2,1,'100002','100002GBP101','GBP'),
 (3,2,'003333','003333EUR201','EUR'),
 (4,1,'100002','100002GBP102','GBP'),
 (5,1,'000001','000001EUR101','EUR'),
 (6,1,'000001','000001USD101','USD'),
 (7,1,'000001','000001USD102','USD'),
 (8,1,'100002','100002EUR101','EUR'),
 (9,1,'100002','100002USD101','USD'),
 (10,2,'003333','003333EUR202','EUR'),
 (11,2,'003333','003333JPY201','JPY');

(Select * From Account Where CustomerNumber = '000001')

РЕДАКТИРОВАТЬ: теперь я надеюсь, что было бы лучше ...

как создать Выбор из таблицы с Группой по Валюте и Заказ по AccountNumber, и с возможностью создания Resultset начинается, например, с AccountNumbers с валютой USD, остальные строки будут сгруппированы в алфавитном порядке по валюте и упорядочены по AccountNumber

для извлечения строк, которые будут отсортированы в следующем порядке USD - EUR - JPY

Редактировать 2:

мой плохой, извините за это, действительно пришло время начать изучать основной язык

в основном, если я позвоню SELECT * FROM Account Where idCustomerNumber = '000001' Order by Currency, AccountNumber, интерпретатор SQL вернет

5,1,"000001","000001EUR101","EUR"
1,1,"000001","000001JPY101","JPY"
6,1,"000001","000001USD101","USD"
7,1,"000001","000001USD102","USD"

но теперь я хочу программно определить, что Resulset начинается со счетов в долларах США, а остаток счета будет группироваться по валюте, а затем - по номеру счета

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Непонятно, что вы хотите.Возможно это?:

SELECT
    *
FROM
    account
WHERE
    idCustomerNumber = '000001'
ORDER BY
    Currency = 'USD'  DESC
  , Currency
  , AccountNumber ;
0 голосов
/ 18 мая 2011

Я думаю, что это должно помочь вам:

 SELECT * FROM account
 WHERE idCustomerNumber = '000001'
 ORDER BY AccountNumber, CASE WHEN Currency = 'USD' THEN 0 WHEN Currency = 'EUR' THEN 1 WHEN Currency = 'JPY' THEN 2 ELSE 0 END

Обычно, когда вы пытаетесь сгруппироваться, вам нужно учитывать, что вы собираетесь делать со столбцами, по которым вы комбинируете, для группировки вам нужно использовать итоговые значения, например: предположим, у вас есть столбец Amount:

 SELECT AccountNumber, Currency, SUM(Amount) AS TotalAmount FROM account
 WHERE idCustomerNumber = '000001'
 GROUP BY AccountNumber, Currency
 ORDER BY AccountNumber, CASE WHEN Currency = 'USD' THEN 0 WHEN Currency = 'EUR' THEN 1 WHEN Currency = 'JPY' THEN 2 ELSE 0 END

Что касается сортировки по доллару США, затем по евро, затем по йене и т. Д., Это лучше всего определить в таблице CurrencySortOrder, чтобы можно было добавлять дополнительные значения без необходимости изменения всех ваших запросов и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...