Предполагая, что оба поля содержат данные в каждой записи.
Если оба поля имеют уникальные числовые значения, рассмотрим:
SELECT Query1.Seq, Query1.F1, Query2.F2
FROM
(SELECT DCount("*","Main","F2<=" & [F2]) AS Seq, Main.F2
FROM Main ORDER BY Main.F2) AS Query2
INNER JOIN
(SELECT DCount("*","Main","F1<=" & [F1]) AS Seq, Main.F1
FROM Main ORDER BY Main.F1) AS Query1
ON Query2.Seq = Query1.Seq
ORDER BY Query1.Seq;
Другой метод запроса требует двух объектов запроса:
Query1
SELECT "F1" AS Src, F1 AS Data FROM Main
UNION SELECT "F2", F2 FROM Main;
Запрос 2 [1112 ]
TRANSFORM First(Query1.Data) AS FirstOfData
SELECT DCount("*","Query1","Src='" & [Src] & "' AND Data<=" & [Data]) AS Seq
FROM Query1
GROUP BY DCount("*","Query1","Src='" & [Src] & "' AND Data<=" & [Data])
PIVOT Query1.Src;
Оба решения могут работать медленно с большим набором данных.
Вот подход VBA. Постройте таблицу с именем MainSorted с 3 полями:
Seq - автономный номер
F1 - номер
F2 - номер
Sub MainSort()
Dim rsSrc As Recordset, db As Database
Dim lngRow As Long
Set db = CurrentDb
db.Execute "DELETE FROM MainSorted"
db.Execute "INSERT INTO MainSorted(F1) SELECT F1 FROM Main ORDER BY F1"
Set rsSrc = db.OpenRecordset("SELECT F2 FROM Main ORDER BY F2")
lngRow = DMin("Seq", "MainSorted")
While Not rsSrc.EOF
db.Execute "UPDATE MainSorted SET F2=" & rsSrc!F2 & " WHERE Seq = " & lngRow
rsSrc.MoveNext
lngRow = lngRow + 1
Wend
End Sub
Или эта версия: [ 1116]
Sub MainSort()
Dim rsSrc1 As Recordset, rsSrc2 As Recordset, db As Database
Set db = CurrentDb
db.Execute "DELETE FROM MainSorted"
Set rsSrc1 = db.OpenRecordset("SELECT F1 FROM Main ORDER BY F1")
Set rsSrc2 = db.OpenRecordset("SELECT F2 FROM Main ORDER BY F2")
While Not rsSrc1.EOF
db.Execute "INSERT INTO MainSorted(F1,F2) VALUES(" & rsSrc1!F1 & "," & rsSrc2!F2 & ")"
rsSrc1.MoveNext
rsSrc2.MoveNext
Wend
End Sub
Учитывая комментарии @CPerkins:
Sub MainSort()
Dim rsSrc1 As Recordset, rsSrc2 As Recordset, rsDest As Recordset, db As Database
Set db = CurrentDb
db.Execute "DELETE FROM MainSorted"
Set rsSrc1 = db.OpenRecordset("SELECT F1 FROM Main ORDER BY F1")
Set rsSrc2 = db.OpenRecordset("SELECT F2 FROM Main ORDER BY F2")
Set rsDest = db.OpenRecordset("SELECT * FROM MainSorted")
While Not rsSrc1.EOF
rsDest.AddNew
rsDest!F1 = rsSrc1!F1
rsDest!F2 = rsSrc2!F2
rsDest.Update
rsSrc1.MoveNext
rsSrc2.MoveNext
Wend
End Sub
Я написал некоторый код, чтобы сделать большую часть работы. Это работает, только если Ваши файлы находятся на локальном диске вместо в JAR. Все, в чем Вы нуждаетесь, является одним классом в пакете. Вы могли, с этой целью, создать класс Locator.java, только чтобы смочь найти пакет.
public class ClassEnumerator {
public static void main(String[] args) throws ClassNotFoundException {
List<Class<?>> list = listClassesInSamePackage(Locator.class, true);
System.out.println(list);
}
private static List<Class<?>> listClassesInSamePackage(Class<?> locator, boolean includeLocator)
throws ClassNotFoundException {
File packageFile = getPackageFile(locator);
String ignore = includeLocator ? null : locator.getSimpleName() + ".class";
return toClassList(locator.getPackage().getName(), listClassNames(packageFile, ignore));
}
private static File getPackageFile(Class<?> locator) {
URL url = locator.getClassLoader().getResource(locator.getName().replace(".", "/") + ".class");
if (url == null) {
throw new RuntimeException("Cannot locate " + Locator.class.getName());
}
try {
return new File(url.toURI()).getParentFile();
}
catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
private static String[] listClassNames(File packageFile, final String ignore) {
return packageFile.list(new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
if (name.equals(ignore)) {
return false;
}
return name.endsWith(".class");
}
});
}
private static List<Class<?>> toClassList(String packageName, String[] classNames)
throws ClassNotFoundException {
List<Class<?>> result = new ArrayList<Class<?>>(classNames.length);
for (String className : classNames) {
// Strip the .class
String simpleName = className.substring(0, className.length() - 6);
result.add(Class.forName(packageName + "." + simpleName));
}
return result;
}
}
Как насчет того, чтобы поместить каждую главную группу junit тестирует в их собственный корневой пакет. Я использую эту структуру пакета в своем проекте:
test.
quick.
com.acme
slow.
com.acme
Без любого кодирования можно создать IntelliJ для запущения всех тестов, просто быстрые или просто медленные.
А как насчет использования JUnit4 и Suite-Runner?
Пример:
@RunWith(Suite.class)
@Suite.SuiteClasses({
UserUnitTest.class,
AnotherUnitTest.class
})
public class UnitTestSuite {}
Я создал небольшой сценарий Shell для поиска всех модульных тестов и еще один для поиска моих интеграционных тестов. Взгляните на мою запись в блоге: http://blog.timomeinen.de/2010/02/find-all-junit-tests-in-a-project/
Если вы используете Spring TestContext вы можете использовать аннотацию @IfProfile для объявления различных тестов.
С уважением, Тимо Майнен