MSSQL导出某些列为空的表
因此,我需要从sql生成一个csv,如下所示:MSSQL导出某些列为空的表,sql,sql-server,tsql,Sql,Sql Server,Tsql,因此,我需要从sql生成一个csv,如下所示: Class Teacher email Student email 3Sci Mr A a@c.com James James@s.com Mary Mary@s.com Joseph Joe@s.com 4Eng Mr B b@c.com
Class Teacher email Student email
3Sci Mr A a@c.com James James@s.com
Mary Mary@s.com
Joseph Joe@s.com
4Eng Mr B b@c.com William William@s.com
James James@s.com
Mary Mary@s.com
等等。
我可以使用SQL获得以下信息:
3Sci Mr A a@c.com James James@s.com
3Sci Mr A a@c.com Mary Mary@s.com
3Sci Mr A a@c.com Joseph Joe@s.com
4Eng Mr B b@c.com William William@s.com
4Eng Mr B b@c.com James James@s.com
4Eng Mr B b@c.com Mary Mary@s.com
我的问题是,有人知道如何在不删除整行的情况下删除这些重复项吗?如果我能做到这一点,那么我将能够将其全部导出到csv。我知道它不能形成一个非常好的表结构,但这正是第三方对我的要求。通常我建议在应用层这样做。但您可以使用窗口函数在SQL中指出这一点:
with t as (
<your query here>
)
select (case when seqnum = 1 then t.Class end) as class,
(case when seqnum = 1 then t.Teacher end) as teacher,
(case when seqnum = 1 then t.email end) as email,
t.Student, t.email
from (select t.*,
row_number() over (partition by t.Class, t.Teacher, t.email order by t.Student) as seqnum
from t
) t
order by t.Class, t.Teacher, t.email, seqnum;
注意外部查询中的ORDERBY。这是非常重要的。SQL不保证结果集的顺序,除非您有order by。而且,排序对于解释结果文件非常重要
如果NULL值不输出为空,则使用else输出空字符串。在SQL Server中,您可以使用带有行号的CTE来清除值。以下是一个例子:
; WITH cteMain AS
(
SELECT '1' AS A, 'r' AS B, 't' AS C
UNION
SELECT '1' AS A, 'r' AS B, 'a' AS C
UNION
SELECT '2' AS A, 'y' AS B, 'a' AS C
UNION
SELECT '2' AS A, 'i' AS B, 'u' AS C
),
cteGrouped AS
(
SELECT *,
ROW_NUMBER() OVER (ORDER BY A, B, C) AS RowNumber
FROM cteMain
),
cteOptimised AS
(
SELECT
CASE ( SELECT G2.A FROM cteGrouped G2 WHERE G1.RowNumber > 1 AND G2.RowNumber = (G1.RowNumber-1) ) WHEN G1.A THEN '' ELSE G1.A END AS A,
CASE ( SELECT G2.B FROM cteGrouped G2 WHERE G1.RowNumber > 1 AND G2.RowNumber = (G1.RowNumber-1) ) WHEN G1.B THEN '' ELSE G1.B END AS B,
CASE ( SELECT G2.C FROM cteGrouped G2 WHERE G1.RowNumber > 1 AND G2.RowNumber = (G1.RowNumber-1) ) WHEN G1.C THEN '' ELSE G1.C END AS C
FROM cteGrouped G1
)
SELECT *
FROM cteOptimised
您当前是如何生成csv文件的?您使用的是哪种sql?sql server、mysql等提供了一个简洁的解决方案。非常感谢。这非常有效。