我在SQL Server中有一個包含369列的表。如何獲得所有行中具有'NULL'的所有日期列表
在這369列中,127列的類型爲date
,其中一些127個日期列在所有行中都有null
值。
如何在所有行中獲得這些date
列的列表,並且使用NULL
值?
我在SQL Server中有一個包含369列的表。如何獲得所有行中具有'NULL'的所有日期列表
在這369列中,127列的類型爲date
,其中一些127個日期列在所有行中都有null
值。
如何在所有行中獲得這些date
列的列表,並且使用NULL
值?
這可能是非常耗費大量資源的操作,這取決於表的大小,但是這應該這樣做:
產生一些SQL:
select
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, column_name, DATA_TYPE, IS_NULLABLE,
cmd = 'case when count(*)=sum(case when [' + COLUMN_NAME + '] is null then 1 else 0 end) then 1 else 0 end as [' + COLUMN_NAME + '__isAllNulls],'
from information_schema.columns
where 1=1
and DATA_TYPE like '%date%'
and TABLE_NAME = '<yourtablename>'
然後寫的選擇:
select
<paste CMD from above results>
from <yourtablename>
編輯2:粘貼生成的CMD列後的樣本最終查詢如下所示:
select
case when count(*)=sum(case when [DateAdded] is not null then 1 else 0 end) then 1 else 0 end as [DateAdded__isAllNulls],
case when count(*)=sum(case when [DateModified] is null then 1 else 0 end) then 1 else 0 end as [DateModified__isAllNulls],
case when count(*)=sum(case when [DateClosed] is null then 1 else 0 end) then 1 else 0 end as [DateClosed__isAllNulls]
from yourtable
結果應該是這樣的:
DateAdded__isAllNulls DateModified__isAllNulls DateClosed__isAllNulls
1 0 0
編輯:簡單min()
或max()
會更好,比我case when count(*)=sum(case ...
,如@Damien_the_Unbeliever在他的評論暗示,但你仍然可以使用我的代碼來生成SQL 。
Where子句中的1 = 1沒有必要。 – Jade
謝謝,我跑了第一個查詢,它給了我這樣的結果: – user3227041
謝謝,我跑了第一個查詢,它給了我這樣的結果:TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE IS_NULLABLE cmd。我沒有得到你想讓我做的第二件事「選擇 <從以上結果粘貼CMD> from
http://stackoverflow.com/questions/7791361/sql-to-return-list-of-fields-containing-non-null-data –
_「我有一個369列的表」___ OMG,你有沒有曾聽說過[正常化](http://en.wikipedia.org/wiki/Database_normalization)? –
您確定要「所有**行**中的NULL值列表」嗎?而不是所有日期列都爲NULL的行?第一個很容易,最後一個也是,但是輸入很多.. – NickyvV