wie kann ich einen standardwert in einer select-abfrage in postgresql verwenden?
<p>ich möchte einen standardwert für eine spalte verwenden, die verwendet werden soll, wenn keine zeilen zurückgegeben werden. ist das in postgresql möglich? wie kann ich es tun? oder gibt es eine andere möglichkeit, dies zu lösen?</p><p>z.b. etwas wie das:</p><pre><code>select max(post\_id) as max\_id default 0 from my\_table where org\_id = 3 </code></pre><p>und wenn die tabelle keine zeilen mit <code>org\_id = 3</code> enthält, möchte ich <code>0</code> zurückgeben.</p>
<pre><code>select coalesce(max(post\_id),0) as max\_id from my\_table where org\_id = 3 </code></pre><p>oder</p><pre><code>select case count(*) when 0 then 0 else max(post\_id) end as max\_id from my\_table where org\_id = 3; </code></pre><p>wenn sie möchten, dass max (post\_id) <code>null</code> ist, wenn 1 zeile vorhanden ist, post\_id jedoch null ist</p><p><em><sub> <a href="http://dbfiddle.uk/?rdbms=oracle\_11.2&amp;fiddle=63aad1acfcbdaf661b8264a3beea57df">dbfiddle</a> </sub></em></p>
Wenn eine Spalte in der Datenbank nullfähig ist, hat die Ergebnisklasse auch eine nullfähige Eigenschaft. 

 Wenn beispielsweise eine `Order` eine `Datetime` Spalte mit dem Namen `CreatedDate` , sieht die resultierende `Order` Klasse in etwa wie folgt aus: 


```
public partial class Order: EntityObject
{
  ...
  private DateTime? _createdDate;
  ...
}

```
  Wenn \_ `createdDate` keinen Wert hat, wenn Sie `ObjectContext.SaveChanges()` aufrufen, wird eine `System.DBNull` automatisch als Teil des Befehls insert oder update an die Datenbank gesendet. 

 Hoffe das hilft Alex weiß nicht, obs klappt, Diagramme sind auch meine Stärke nicht, im Kopf schon gleich gar nicht, aber versuch doch mal, die x-Achse manuell fallend festzulegen, also nicht von zB min 0..max100, sondern von 100..0


Oder Du manipulierst die Werte: in A11: =max($A10:$E10)-A10, rüberziehen.  

(oder =100-A10). Wäre **alternativ** auch für y denkbar (nicht beides gleichzeitig!).
Auch -A10 könnte gehen, wenn Dich das negative Vorzeichen nicht stört. 


Dabei kannst Du vor E:E immer wieder eine Spalte einsetzen. das Diagramm übernimmt das aber nur vielleicht, wenn Du schreibst **"='Tabelle1'!$A$10:$E$10"** . Alle anderen Bezüge entsprechend. <p>die standardmethode für die angabe des objekttyps ist entweder <a href="http://search.cpan.org/perldoc?perlfunc#ref"><code>ref</code></a> oder <a href="http://search.cpan.org/perldoc?scalar::util"><code>scalar::util</code></a> <code>::blessed</code>. wenn sie<em> wissen </em>das objekt gesegnet ist, geben sie dieselbe information zurück. </p><pre><code>my $class1 = blessed( $obj ); my $class2 = ref $obj; </code></pre><p><code>ref</code> gibt jedoch auch 'hash' für nicht gesegnete hashes zurück, während <code>blessed</code> dieses spiel ablehnt. </p><p>für eine liste von methoden ist es für den gesegneten zeigerstil eines perl-objekts einfach, eine davon selbst zu codieren. der folgende code funktioniert ziemlich gut für mich. es gibt die namen der funktionen (diejenigen, die den &quot;code-slot&quot; des angegebenen namens annehmen) zurück, die dem paket zugeordnet sind, das sie definiert. </p><pre><code>sub class\_methods { use class::isa; my $obj = shift; return unless ref( $obj ); my %meth\_names; foreach my $anc ( class::isa::self\_and\_super\_path( ref $obj ), 'universal' ) { my $stash = \%{"$anc\::"}; my @funcs = grep { m/^[\_\p{alpha}]/ # begins with \_ or alpha &amp;&amp; !exists $meth\_names{$\_} # no clobbering &amp;&amp; defined *{$stash-&gt;{$\_}}{code} # has a filled code slot } keys %$stash ; # assign to the "hash slice", keyed by all the entries in @funcs # the value of $anc repeated as many times as elements in @funcs. @meth\_names{@funcs} = ( $anc ) x @funcs; } return %meth\_names; } </code></pre><ul> <li><p>dies funktioniert auch für relativ komplexe objekte, aber wenn das besitzende paket eine menge generierten codes enthält, ist es nicht besonders hilfreich zu wissen, in welchem ​​paket die generatoren den code-pointer stecken. es wird mehr bedeuten, welches paket zu finden ist generiert den code. </p></li> <li><p>ist dies der fall, erhalten sie<em> might </em>den code aus der ausführung ihres codes, einschließlich <a href="http://search.cpan.org/perldoc?data::dumper"><code>data::dumper</code></a> und setzen von <code>$data::dumper::deparse</code> auf 1 wie folgt: (<code>local $data::dumper::deparse = 1;</code>) und dann den code-zeiger wie folgt: <code>say dumper( $code\_ref );</code></p></li> <li><p>es<em> won't </em>funktioniert für gültige methoden, die noch mit einer beliebigen <code>autoload</code>-methode erstellt werden müssen. wenn sie diese in der liste sehen, macht das objekt möglicherweise mehr, aber was es alles tut, wissen sie nicht.</p></li> <li><p>die &quot;basisklasse&quot; <code>universal</code> ist enthalten, da diese klasse verhalten enthält, das vom objekt verwendet werden kann. </p></li> </ul><p>viel glück.</p> Der Grund für das Problem war ein Fehler in der Effort-Datenbank. Wenn die berechnete Spalte auf nicht nullwertfähigen Spalten basiert, kann die berechnete Spalte auch automatisch nicht nullwertfähig werden. Daher erwartete die Effort-Datenbank einen Wert ungleich Null. Mit dem neuesten Update ist das Problem behoben. Sie müssen das globale `EntityFrameworkEffortManager.UseDefaultForNotNullable` Flag auf true setzen. 

 Siehe die [Ausgabe auf Github](https://github.com/zzzprojects/EntityFramework-Effort/issues/62#issuecomment-471199839) <p>sie können das meiste davon tun, indem sie eine login.sql verwenden. login.sql wird während der - überraschenden - anmeldung ausgeführt und aus ihrem sqlpath oder dem aktuellen verzeichnis geladen. für die beispiele, die sie gegeben haben, haben sie wirklich den schlimmsten fall gewählt.</p><p>problem ist der sqlterminator. was auch immer sie dort eingeben, der schrägstrich wird als kostenloser sql-minator beibehalten. daneben sucht sqlplus zuerst nach dem sqlterminator und führt dies vor dem scannen zum string-terminator durch. ein fehler, wenn sie mich fragen. der schrägstrich kann in einer zeichenfolge verwendet werden, solange er nicht allein in einer separaten zeile steht. sobald sqlplus das als sqlterminator angegebene zeichen findet, ignoriert es alles andere und hört auf zu lesen.</p><p>der schrägstrich kann behandelt werden, solange er nicht alleine in einer zeile steht.</p><p>login.sql enthält:</p><pre><code>prompt run login.sql show sqlterminator show sqlblanklines set sqlblanklines on set sqlterminator ';' show sqlterminator show sqlblanklines prompt ready login.sql set echo on </code></pre><p>leigh.sql enthält:</p><pre><code>insert into t1 values ('fail bc semicolon a;a / '); insert into t1 values ('fail bc solo / aa / '); insert into t1 values ('ok / not solo aa /a '); delete from t1 where a = 'c a/ '; </code></pre><p>führen sie das skript aus:</p><pre><code>sqlplus leigh/leigh@orcl @leigh sql*plus: release 10.2.0.4.0 - production on thu aug 9 22:36:20 2012 copyright (c) 1982, 2007, oracle. all rights reserved. connected to: oracle database 11g enterprise edition release 11.2.0.3.0 - 64bit production with the partitioning, real application clusters, automatic storage management, olap, data mining and real application testing options run login.sql sqlterminator ";" (hex 3b) sqlblanklines off sqlterminator ";" (hex 3b) sqlblanklines on ready login.sql sql&gt; insert into t1 values ('fail bc semicolon 2 a;a 3 / error: ora-01756: quoted string not properly terminated sql&gt; '); sp2-0042: unknown command "')" - rest of line ignored. sql&gt; sql&gt; insert into t1 values ('fail bc solo / 2 3 4 aa 5 / error: ora-01756: quoted string not properly terminated sql&gt; '); sp2-0042: unknown command "')" - rest of line ignored. sql&gt; sql&gt; insert into t1 values ('ok / not solo 2 3 4 aa 5 /a 6 '); 1 row created. sql&gt; sql&gt; delete from t1 where a = 'c 2 3 4 a/ 5 '; 0 rows deleted. </code></pre><p>sie müssen nicht mit start-/endblöcken herumspielen. der befehl sqlterminator innerhalb des befehls kann nicht verarbeitet werden, unabhängig davon, wo er sich in einer zeichenfolge befindet oder nicht. er kann keine zeilen mit schrägstrich allein in einer zeile in einer zeichenfolge verarbeiten.</p> <p>es gibt optionen, die ihnen dabei helfen:</p><pre><code> --insert-ignore insert rows with insert ignore. --replace use replace into instead of insert into. -t, --no-create-info don't write table creation info. </code></pre><p>denken sie an dieses paradigma</p><ul> <li>mysqldump alles von db1 in dump1</li> <li>laden sie dump1 in db3</li> <li>mysqldump alles aus db2 mit --replace (oder --insert-ignore) und --no-create-info in dump2</li> <li>laden sie dump2 in db3</li> </ul> Sie können verwenden 


```
DbConfiguration.SetConfiguration(new YourDbConfiguration());

```
  Sie können also Ihre Konfiguration verwenden, ohne ein Attribut zu verwenden. 

 Aber wenn ich benutze 


```
public CeDbConfiguration()
{
 SetDefaultConnectionFactory(new SqlCeConnectionFactory(SqlCeProviderServices.ProviderInvariantName,
                                                        @"c:\test",
                                                        @"c:\test\db.sdf"));
SetProviderServices(SqlCeProviderServices.ProviderInvariantName,
                    SqlCeProviderServices.Instance);
}

```
  Um eine SQL CE Factory zu konfigurieren, wird der Pfad *'C: \ test'* ignoriert und ich muss auch Database.DefaultConnectionFactory setzen !! Wenn die Abfrage keine Ergebnisraster zurückgibt, sollten Sie Execute und nicht Query verwenden. Parameter von Lambda-Ausdrücken verwenden keine auf Namen basierende Gleichheit, sie verwenden Referenzgleichheit. In Ihrem Ausdruck haben Sie also zwei völlig verschiedene Parameter namens `s` , einer ist definiert, wird aber nicht verwendet, der andere wird verwendet, aber nicht definiert. 

 Also, im Grunde ist Ihr Ausdruck etwas wie `s1 => s2 == "test"` , weshalb er nicht kompiliert werden kann. Die einfachste Lösung wäre, denselben Parameter zu verwenden, den der ursprüngliche Ausdruck verwendet: 


```
LambdaExpression lambda = Expression.Lambda(equal.Body, equal.Parameters.Single());

```
  Wenn Sie wirklich Ihren eigenen Parameter verwenden möchten, müssten Sie alle Instanzen des ursprünglichen Parameters im Lambda-Body durch Ihren neuen Parameter ersetzen. Der beste Weg dies zu tun, ist [`ExpressionVisitor`](http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx) zu verwenden. Hallo! 
  
Die Lösung findest du in <http://office.microsoft.com/de-de/excel-help/anzeigen-oder-ausblenden-von-spalten-und-zeilen-HP010342574.aspx.>
  
L.G