在T-SQL中按条件排序

时间:2019-06-24 15:00:09

标签: sql sql-server tsql sql-order-by

我有两个结果列。 一个是用户名,另一个是日期时间,可以检查每个用户何时查看帖子。如果用户未看到该帖子,则日期时间值为NULL。

我想这样订购数据。 date-time为null或不为null都是按用户名字母顺序排列的。 但应将空数据和非空数据分开。

SELECT u.username AS username,
       MAX(w1.date) AS lastdate
FROM w1
     RIGHT OUTER JOIN user_info u ON w1.userid = u.userid
WHERE u.usergroup = 'student'
GROUP BY username
ORDER BY lastdate,
         username;

当我运行此查询时,我可以得到的结果是 当日期时间为NULL时,用户名按字母顺序排序, 但是如果date-time不为null,则按date-time排序。

希望大家能理解,如果不清楚,请发表评论。

2 个答案:

答案 0 :(得分:5)

您可以使用

order by case when lastdate is null then 0 
              else 1 end, username

答案 1 :(得分:4)

我建议使用Dense并将查询词组设置为:

def create_nerual_network():
    model = tf.keras.models.Sequential()

    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu)) # Simple Dense Layer
    model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu)) # Simple Dense Layer
    model.add(tf.keras.layers.Dense(2, activation=tf.nn.softmax))   # Output layer

    return model


train_images, train_labels = load_dataset() #this function works fine
model = create_nerual_network()

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(train_images, train_labels, epochs = 15, verbose=2)
train_loss, train_acc = model.evaluate(train_images, train_labels)

left join几乎永远不适用于SELECT u.username AS username, MAX(w1.date) AS lastdate FROM user_info u LEFT JOIN w1 ON w1.userid = u.userid WHERE u.usergroup = 'student' GROUP BY u.username ORDER BY (CASE WHEN w1.date IS NULL THEN 1 ELSE 0 END), u.username;

我还建议限定引用多个表的查询中的所有列引用。