|
我在SQL Server 2008中具有下表:, z a+ W+ d- k$ P9 E
CREATE TABLE tbl (ID INT, dtIn DATETIME2, dtOut DATETIME2, Type INT)8 S5 ^* n# R3 F/ T) G
INSERT tbl VALUES2 b& Q! o% E+ O+ ^: {$ z9 n/ j' {
(1, '05:00', '6:00', 1),
# H0 `+ I( W1 y(2, '05:00', '7:00', 1),, L- s4 V' ?1 s
(3, '05:01', '8:00', 1),5 h# l9 H$ H6 r: q& q8 k
(4, '05:00', '8:00', 1),
, F2 l1 z2 k! F+ n9 k(5, '05:00', '6:00', 2),- @2 q6 ]; w! L2 m2 f) `
(6, '05:00', '7:00', 2)
% n: t! o; M) p+ g% ^选择具有相同dtIn日期的相同类型的所有记录的ID,并按stOut升序排列:. q9 \' k. {6 f, w$ R: t# G3 F5 O
SELECT DISTINCT tbl.id FROM tbl , V6 ^8 {. m) v
LEFT JOIN tbl AS t1
( v# z3 S4 H5 m) n ON tbl.type = t1.type AND
, s9 H% q }# Z- Z* g tbl.dtIn = t1.dtIn+ K0 Z7 p9 D* k% _) g# M) E) C( E, ^
ORDER BY tbl.dtOut ASC8 ^: K! H7 H: W7 f8 D! v1 I" E
但这给了我一个错误:
8 O+ t" d; X( i: `3 P8 N0 b4 j7 F) e) Q* g) ]
如果指定了SELECT DISTINCT,则ORDER BY项目必须出现在选择列表中8 l/ }( P! W, Q5 ^ I' q( Y
/ [" [ @0 h# T* h* S* N
我尝试将ORDER BY放在不同的地方,但这似乎不起作用。我在这里做错了什么?7 v3 I; f' l( p
; p/ c' f' k$ ?8 v8 {5 F% a
解决方案:3 w7 u8 Q: Z! r: B* N
- |) e/ r- i3 _
4 P/ f( }1 ^, a, l) } @4 v
1 Y3 c" H4 A: y4 j 当您将其范围缩小到单个ID时,您就有可能每个ID可能都具有多个dtOut关联的ID 。发生这种情况时,Sql Server将如何知道要使用哪个命令?5 n; G8 G" m# E# j
您可以尝试:
s/ R* Q) V" J2 `! R* D: J% TSELECT t1.id
' f6 w1 O5 x2 t! zFROM tbl t1
2 P* b% O/ q7 m$ f, gLEFT JOIN tbl t2 on t1.type = t2.type AND t1.dtIn = t2.dtIn
' `+ G! q" E' B, f% e* vGROUP BY t1.id, t2.dtOut
. ?8 C6 p# d9 v( BORDER BY t2.dtOut/ W' H" m% v. o3 n6 l8 Z% H. r
但是,如上所述,如果它与右侧表上的多个记录匹配,则可能会多次列出相同的ID。 |
|